(0) Obligation:

The Runtime Complexity (innermost) of the given CpxRelTRS could be proven to be BOUNDS(1, n^2).


The TRS R consists of the following rules:

prefix(Cons(x', xs'), Cons(x, xs)) → and(!EQ(x', x), prefix(xs', xs))
domatch(Cons(x, xs), Nil, n) → Nil
domatch(Nil, Nil, n) → Cons(n, Nil)
prefix(Cons(x, xs), Nil) → False
prefix(Nil, cs) → True
domatch(patcs, Cons(x, xs), n) → domatch[Ite](prefix(patcs, Cons(x, xs)), patcs, Cons(x, xs), n)
eqNatList(Cons(x, xs), Cons(y, ys)) → eqNatList[Ite](!EQ(x, y), y, ys, x, xs)
eqNatList(Cons(x, xs), Nil) → False
eqNatList(Nil, Cons(y, ys)) → False
eqNatList(Nil, Nil) → True
notEmpty(Cons(x, xs)) → True
notEmpty(Nil) → False
strmatch(patstr, str) → domatch(patstr, str, Nil)

The (relative) TRS S consists of the following rules:

and(False, False) → False
and(True, False) → False
and(False, True) → False
and(True, True) → True
!EQ(S(x), S(y)) → !EQ(x, y)
!EQ(0, S(y)) → False
!EQ(S(x), 0) → False
!EQ(0, 0) → True
domatch[Ite](False, patcs, Cons(x, xs), n) → domatch(patcs, xs, Cons(n, Cons(Nil, Nil)))
domatch[Ite](True, patcs, Cons(x, xs), n) → Cons(n, domatch(patcs, xs, Cons(n, Cons(Nil, Nil))))
eqNatList[Ite](False, y, ys, x, xs) → False
eqNatList[Ite](True, y, ys, x, xs) → eqNatList(xs, ys)

Rewrite Strategy: INNERMOST

(1) RelTrsToWeightedTrsProof (BOTH BOUNDS(ID, ID) transformation)

Transformed relative TRS to weighted TRS

(2) Obligation:

The Runtime Complexity (innermost) of the given CpxWeightedTrs could be proven to be BOUNDS(1, n^2).


The TRS R consists of the following rules:

prefix(Cons(x', xs'), Cons(x, xs)) → and(!EQ(x', x), prefix(xs', xs)) [1]
domatch(Cons(x, xs), Nil, n) → Nil [1]
domatch(Nil, Nil, n) → Cons(n, Nil) [1]
prefix(Cons(x, xs), Nil) → False [1]
prefix(Nil, cs) → True [1]
domatch(patcs, Cons(x, xs), n) → domatch[Ite](prefix(patcs, Cons(x, xs)), patcs, Cons(x, xs), n) [1]
eqNatList(Cons(x, xs), Cons(y, ys)) → eqNatList[Ite](!EQ(x, y), y, ys, x, xs) [1]
eqNatList(Cons(x, xs), Nil) → False [1]
eqNatList(Nil, Cons(y, ys)) → False [1]
eqNatList(Nil, Nil) → True [1]
notEmpty(Cons(x, xs)) → True [1]
notEmpty(Nil) → False [1]
strmatch(patstr, str) → domatch(patstr, str, Nil) [1]
and(False, False) → False [0]
and(True, False) → False [0]
and(False, True) → False [0]
and(True, True) → True [0]
!EQ(S(x), S(y)) → !EQ(x, y) [0]
!EQ(0, S(y)) → False [0]
!EQ(S(x), 0) → False [0]
!EQ(0, 0) → True [0]
domatch[Ite](False, patcs, Cons(x, xs), n) → domatch(patcs, xs, Cons(n, Cons(Nil, Nil))) [0]
domatch[Ite](True, patcs, Cons(x, xs), n) → Cons(n, domatch(patcs, xs, Cons(n, Cons(Nil, Nil)))) [0]
eqNatList[Ite](False, y, ys, x, xs) → False [0]
eqNatList[Ite](True, y, ys, x, xs) → eqNatList(xs, ys) [0]

Rewrite Strategy: INNERMOST

(3) TypeInferenceProof (BOTH BOUNDS(ID, ID) transformation)

Infered types.

(4) Obligation:

Runtime Complexity Weighted TRS with Types.
The TRS R consists of the following rules:

prefix(Cons(x', xs'), Cons(x, xs)) → and(!EQ(x', x), prefix(xs', xs)) [1]
domatch(Cons(x, xs), Nil, n) → Nil [1]
domatch(Nil, Nil, n) → Cons(n, Nil) [1]
prefix(Cons(x, xs), Nil) → False [1]
prefix(Nil, cs) → True [1]
domatch(patcs, Cons(x, xs), n) → domatch[Ite](prefix(patcs, Cons(x, xs)), patcs, Cons(x, xs), n) [1]
eqNatList(Cons(x, xs), Cons(y, ys)) → eqNatList[Ite](!EQ(x, y), y, ys, x, xs) [1]
eqNatList(Cons(x, xs), Nil) → False [1]
eqNatList(Nil, Cons(y, ys)) → False [1]
eqNatList(Nil, Nil) → True [1]
notEmpty(Cons(x, xs)) → True [1]
notEmpty(Nil) → False [1]
strmatch(patstr, str) → domatch(patstr, str, Nil) [1]
and(False, False) → False [0]
and(True, False) → False [0]
and(False, True) → False [0]
and(True, True) → True [0]
!EQ(S(x), S(y)) → !EQ(x, y) [0]
!EQ(0, S(y)) → False [0]
!EQ(S(x), 0) → False [0]
!EQ(0, 0) → True [0]
domatch[Ite](False, patcs, Cons(x, xs), n) → domatch(patcs, xs, Cons(n, Cons(Nil, Nil))) [0]
domatch[Ite](True, patcs, Cons(x, xs), n) → Cons(n, domatch(patcs, xs, Cons(n, Cons(Nil, Nil)))) [0]
eqNatList[Ite](False, y, ys, x, xs) → False [0]
eqNatList[Ite](True, y, ys, x, xs) → eqNatList(xs, ys) [0]

The TRS has the following type information:
prefix :: Cons:Nil:S:0 → Cons:Nil:S:0 → False:True
Cons :: Cons:Nil:S:0 → Cons:Nil:S:0 → Cons:Nil:S:0
and :: False:True → False:True → False:True
!EQ :: Cons:Nil:S:0 → Cons:Nil:S:0 → False:True
domatch :: Cons:Nil:S:0 → Cons:Nil:S:0 → Cons:Nil:S:0 → Cons:Nil:S:0
Nil :: Cons:Nil:S:0
False :: False:True
True :: False:True
domatch[Ite] :: False:True → Cons:Nil:S:0 → Cons:Nil:S:0 → Cons:Nil:S:0 → Cons:Nil:S:0
eqNatList :: Cons:Nil:S:0 → Cons:Nil:S:0 → False:True
eqNatList[Ite] :: False:True → Cons:Nil:S:0 → Cons:Nil:S:0 → Cons:Nil:S:0 → Cons:Nil:S:0 → False:True
notEmpty :: Cons:Nil:S:0 → False:True
strmatch :: Cons:Nil:S:0 → Cons:Nil:S:0 → Cons:Nil:S:0
S :: Cons:Nil:S:0 → Cons:Nil:S:0
0 :: Cons:Nil:S:0

Rewrite Strategy: INNERMOST

(5) CompletionProof (UPPER BOUND(ID) transformation)

The transformation into a RNTS is sound, since:

(a) The obligation is a constructor system where every type has a constant constructor,

(b) The following defined symbols do not have to be completely defined, as they can never occur inside other defined symbols:


domatch
eqNatList
notEmpty
strmatch

(c) The following functions are completely defined:

prefix
and
!EQ
domatch[Ite]
eqNatList[Ite]

Due to the following rules being added:

and(v0, v1) → null_and [0]
!EQ(v0, v1) → null_!EQ [0]
domatch[Ite](v0, v1, v2, v3) → null_domatch[Ite] [0]
eqNatList[Ite](v0, v1, v2, v3, v4) → null_eqNatList[Ite] [0]
prefix(v0, v1) → null_prefix [0]

And the following fresh constants:

null_and, null_!EQ, null_domatch[Ite], null_eqNatList[Ite], null_prefix

(6) Obligation:

Runtime Complexity Weighted TRS where critical functions are completely defined. The underlying TRS is:

Runtime Complexity Weighted TRS with Types.
The TRS R consists of the following rules:

prefix(Cons(x', xs'), Cons(x, xs)) → and(!EQ(x', x), prefix(xs', xs)) [1]
domatch(Cons(x, xs), Nil, n) → Nil [1]
domatch(Nil, Nil, n) → Cons(n, Nil) [1]
prefix(Cons(x, xs), Nil) → False [1]
prefix(Nil, cs) → True [1]
domatch(patcs, Cons(x, xs), n) → domatch[Ite](prefix(patcs, Cons(x, xs)), patcs, Cons(x, xs), n) [1]
eqNatList(Cons(x, xs), Cons(y, ys)) → eqNatList[Ite](!EQ(x, y), y, ys, x, xs) [1]
eqNatList(Cons(x, xs), Nil) → False [1]
eqNatList(Nil, Cons(y, ys)) → False [1]
eqNatList(Nil, Nil) → True [1]
notEmpty(Cons(x, xs)) → True [1]
notEmpty(Nil) → False [1]
strmatch(patstr, str) → domatch(patstr, str, Nil) [1]
and(False, False) → False [0]
and(True, False) → False [0]
and(False, True) → False [0]
and(True, True) → True [0]
!EQ(S(x), S(y)) → !EQ(x, y) [0]
!EQ(0, S(y)) → False [0]
!EQ(S(x), 0) → False [0]
!EQ(0, 0) → True [0]
domatch[Ite](False, patcs, Cons(x, xs), n) → domatch(patcs, xs, Cons(n, Cons(Nil, Nil))) [0]
domatch[Ite](True, patcs, Cons(x, xs), n) → Cons(n, domatch(patcs, xs, Cons(n, Cons(Nil, Nil)))) [0]
eqNatList[Ite](False, y, ys, x, xs) → False [0]
eqNatList[Ite](True, y, ys, x, xs) → eqNatList(xs, ys) [0]
and(v0, v1) → null_and [0]
!EQ(v0, v1) → null_!EQ [0]
domatch[Ite](v0, v1, v2, v3) → null_domatch[Ite] [0]
eqNatList[Ite](v0, v1, v2, v3, v4) → null_eqNatList[Ite] [0]
prefix(v0, v1) → null_prefix [0]

The TRS has the following type information:
prefix :: Cons:Nil:S:0:null_domatch[Ite] → Cons:Nil:S:0:null_domatch[Ite] → False:True:null_and:null_!EQ:null_eqNatList[Ite]:null_prefix
Cons :: Cons:Nil:S:0:null_domatch[Ite] → Cons:Nil:S:0:null_domatch[Ite] → Cons:Nil:S:0:null_domatch[Ite]
and :: False:True:null_and:null_!EQ:null_eqNatList[Ite]:null_prefix → False:True:null_and:null_!EQ:null_eqNatList[Ite]:null_prefix → False:True:null_and:null_!EQ:null_eqNatList[Ite]:null_prefix
!EQ :: Cons:Nil:S:0:null_domatch[Ite] → Cons:Nil:S:0:null_domatch[Ite] → False:True:null_and:null_!EQ:null_eqNatList[Ite]:null_prefix
domatch :: Cons:Nil:S:0:null_domatch[Ite] → Cons:Nil:S:0:null_domatch[Ite] → Cons:Nil:S:0:null_domatch[Ite] → Cons:Nil:S:0:null_domatch[Ite]
Nil :: Cons:Nil:S:0:null_domatch[Ite]
False :: False:True:null_and:null_!EQ:null_eqNatList[Ite]:null_prefix
True :: False:True:null_and:null_!EQ:null_eqNatList[Ite]:null_prefix
domatch[Ite] :: False:True:null_and:null_!EQ:null_eqNatList[Ite]:null_prefix → Cons:Nil:S:0:null_domatch[Ite] → Cons:Nil:S:0:null_domatch[Ite] → Cons:Nil:S:0:null_domatch[Ite] → Cons:Nil:S:0:null_domatch[Ite]
eqNatList :: Cons:Nil:S:0:null_domatch[Ite] → Cons:Nil:S:0:null_domatch[Ite] → False:True:null_and:null_!EQ:null_eqNatList[Ite]:null_prefix
eqNatList[Ite] :: False:True:null_and:null_!EQ:null_eqNatList[Ite]:null_prefix → Cons:Nil:S:0:null_domatch[Ite] → Cons:Nil:S:0:null_domatch[Ite] → Cons:Nil:S:0:null_domatch[Ite] → Cons:Nil:S:0:null_domatch[Ite] → False:True:null_and:null_!EQ:null_eqNatList[Ite]:null_prefix
notEmpty :: Cons:Nil:S:0:null_domatch[Ite] → False:True:null_and:null_!EQ:null_eqNatList[Ite]:null_prefix
strmatch :: Cons:Nil:S:0:null_domatch[Ite] → Cons:Nil:S:0:null_domatch[Ite] → Cons:Nil:S:0:null_domatch[Ite]
S :: Cons:Nil:S:0:null_domatch[Ite] → Cons:Nil:S:0:null_domatch[Ite]
0 :: Cons:Nil:S:0:null_domatch[Ite]
null_and :: False:True:null_and:null_!EQ:null_eqNatList[Ite]:null_prefix
null_!EQ :: False:True:null_and:null_!EQ:null_eqNatList[Ite]:null_prefix
null_domatch[Ite] :: Cons:Nil:S:0:null_domatch[Ite]
null_eqNatList[Ite] :: False:True:null_and:null_!EQ:null_eqNatList[Ite]:null_prefix
null_prefix :: False:True:null_and:null_!EQ:null_eqNatList[Ite]:null_prefix

Rewrite Strategy: INNERMOST

(7) NarrowingProof (BOTH BOUNDS(ID, ID) transformation)

Narrowed the inner basic terms of all right-hand sides by a single narrowing step.

(8) Obligation:

Runtime Complexity Weighted TRS where critical functions are completely defined. The underlying TRS is:

Runtime Complexity Weighted TRS with Types.
The TRS R consists of the following rules:

prefix(Cons(S(x''), Cons(x''', xs'')), Cons(S(y'), Cons(x2, xs1))) → and(!EQ(x'', y'), and(!EQ(x''', x2), prefix(xs'', xs1))) [2]
prefix(Cons(S(x''), Cons(x3, xs2)), Cons(S(y'), Nil)) → and(!EQ(x'', y'), False) [2]
prefix(Cons(S(x''), Nil), Cons(S(y'), xs)) → and(!EQ(x'', y'), True) [2]
prefix(Cons(S(x''), xs'), Cons(S(y'), xs)) → and(!EQ(x'', y'), null_prefix) [1]
prefix(Cons(0, Cons(x'1, xs''')), Cons(S(y''), Cons(x4, xs3))) → and(False, and(!EQ(x'1, x4), prefix(xs''', xs3))) [2]
prefix(Cons(0, Cons(x5, xs4)), Cons(S(y''), Nil)) → and(False, False) [2]
prefix(Cons(0, Nil), Cons(S(y''), xs)) → and(False, True) [2]
prefix(Cons(0, xs'), Cons(S(y''), xs)) → and(False, null_prefix) [1]
prefix(Cons(S(x1), Cons(x'2, xs'1)), Cons(0, Cons(x6, xs5))) → and(False, and(!EQ(x'2, x6), prefix(xs'1, xs5))) [2]
prefix(Cons(S(x1), Cons(x7, xs6)), Cons(0, Nil)) → and(False, False) [2]
prefix(Cons(S(x1), Nil), Cons(0, xs)) → and(False, True) [2]
prefix(Cons(S(x1), xs'), Cons(0, xs)) → and(False, null_prefix) [1]
prefix(Cons(0, Cons(x'3, xs'2)), Cons(0, Cons(x8, xs7))) → and(True, and(!EQ(x'3, x8), prefix(xs'2, xs7))) [2]
prefix(Cons(0, Cons(x9, xs8)), Cons(0, Nil)) → and(True, False) [2]
prefix(Cons(0, Nil), Cons(0, xs)) → and(True, True) [2]
prefix(Cons(0, xs'), Cons(0, xs)) → and(True, null_prefix) [1]
prefix(Cons(x', Cons(x'4, xs'3)), Cons(x, Cons(x10, xs9))) → and(null_!EQ, and(!EQ(x'4, x10), prefix(xs'3, xs9))) [2]
prefix(Cons(x', Cons(x11, xs10)), Cons(x, Nil)) → and(null_!EQ, False) [2]
prefix(Cons(x', Nil), Cons(x, xs)) → and(null_!EQ, True) [2]
prefix(Cons(x', xs'), Cons(x, xs)) → and(null_!EQ, null_prefix) [1]
domatch(Cons(x, xs), Nil, n) → Nil [1]
domatch(Nil, Nil, n) → Cons(n, Nil) [1]
prefix(Cons(x, xs), Nil) → False [1]
prefix(Nil, cs) → True [1]
domatch(Cons(x'5, xs'4), Cons(x, xs), n) → domatch[Ite](and(!EQ(x'5, x), prefix(xs'4, xs)), Cons(x'5, xs'4), Cons(x, xs), n) [2]
domatch(Nil, Cons(x, xs), n) → domatch[Ite](True, Nil, Cons(x, xs), n) [2]
domatch(patcs, Cons(x, xs), n) → domatch[Ite](null_prefix, patcs, Cons(x, xs), n) [1]
eqNatList(Cons(S(x12), xs), Cons(S(y1), ys)) → eqNatList[Ite](!EQ(x12, y1), S(y1), ys, S(x12), xs) [1]
eqNatList(Cons(0, xs), Cons(S(y2), ys)) → eqNatList[Ite](False, S(y2), ys, 0, xs) [1]
eqNatList(Cons(S(x13), xs), Cons(0, ys)) → eqNatList[Ite](False, 0, ys, S(x13), xs) [1]
eqNatList(Cons(0, xs), Cons(0, ys)) → eqNatList[Ite](True, 0, ys, 0, xs) [1]
eqNatList(Cons(x, xs), Cons(y, ys)) → eqNatList[Ite](null_!EQ, y, ys, x, xs) [1]
eqNatList(Cons(x, xs), Nil) → False [1]
eqNatList(Nil, Cons(y, ys)) → False [1]
eqNatList(Nil, Nil) → True [1]
notEmpty(Cons(x, xs)) → True [1]
notEmpty(Nil) → False [1]
strmatch(patstr, str) → domatch(patstr, str, Nil) [1]
and(False, False) → False [0]
and(True, False) → False [0]
and(False, True) → False [0]
and(True, True) → True [0]
!EQ(S(x), S(y)) → !EQ(x, y) [0]
!EQ(0, S(y)) → False [0]
!EQ(S(x), 0) → False [0]
!EQ(0, 0) → True [0]
domatch[Ite](False, patcs, Cons(x, xs), n) → domatch(patcs, xs, Cons(n, Cons(Nil, Nil))) [0]
domatch[Ite](True, patcs, Cons(x, xs), n) → Cons(n, domatch(patcs, xs, Cons(n, Cons(Nil, Nil)))) [0]
eqNatList[Ite](False, y, ys, x, xs) → False [0]
eqNatList[Ite](True, y, ys, x, xs) → eqNatList(xs, ys) [0]
and(v0, v1) → null_and [0]
!EQ(v0, v1) → null_!EQ [0]
domatch[Ite](v0, v1, v2, v3) → null_domatch[Ite] [0]
eqNatList[Ite](v0, v1, v2, v3, v4) → null_eqNatList[Ite] [0]
prefix(v0, v1) → null_prefix [0]

The TRS has the following type information:
prefix :: Cons:Nil:S:0:null_domatch[Ite] → Cons:Nil:S:0:null_domatch[Ite] → False:True:null_and:null_!EQ:null_eqNatList[Ite]:null_prefix
Cons :: Cons:Nil:S:0:null_domatch[Ite] → Cons:Nil:S:0:null_domatch[Ite] → Cons:Nil:S:0:null_domatch[Ite]
and :: False:True:null_and:null_!EQ:null_eqNatList[Ite]:null_prefix → False:True:null_and:null_!EQ:null_eqNatList[Ite]:null_prefix → False:True:null_and:null_!EQ:null_eqNatList[Ite]:null_prefix
!EQ :: Cons:Nil:S:0:null_domatch[Ite] → Cons:Nil:S:0:null_domatch[Ite] → False:True:null_and:null_!EQ:null_eqNatList[Ite]:null_prefix
domatch :: Cons:Nil:S:0:null_domatch[Ite] → Cons:Nil:S:0:null_domatch[Ite] → Cons:Nil:S:0:null_domatch[Ite] → Cons:Nil:S:0:null_domatch[Ite]
Nil :: Cons:Nil:S:0:null_domatch[Ite]
False :: False:True:null_and:null_!EQ:null_eqNatList[Ite]:null_prefix
True :: False:True:null_and:null_!EQ:null_eqNatList[Ite]:null_prefix
domatch[Ite] :: False:True:null_and:null_!EQ:null_eqNatList[Ite]:null_prefix → Cons:Nil:S:0:null_domatch[Ite] → Cons:Nil:S:0:null_domatch[Ite] → Cons:Nil:S:0:null_domatch[Ite] → Cons:Nil:S:0:null_domatch[Ite]
eqNatList :: Cons:Nil:S:0:null_domatch[Ite] → Cons:Nil:S:0:null_domatch[Ite] → False:True:null_and:null_!EQ:null_eqNatList[Ite]:null_prefix
eqNatList[Ite] :: False:True:null_and:null_!EQ:null_eqNatList[Ite]:null_prefix → Cons:Nil:S:0:null_domatch[Ite] → Cons:Nil:S:0:null_domatch[Ite] → Cons:Nil:S:0:null_domatch[Ite] → Cons:Nil:S:0:null_domatch[Ite] → False:True:null_and:null_!EQ:null_eqNatList[Ite]:null_prefix
notEmpty :: Cons:Nil:S:0:null_domatch[Ite] → False:True:null_and:null_!EQ:null_eqNatList[Ite]:null_prefix
strmatch :: Cons:Nil:S:0:null_domatch[Ite] → Cons:Nil:S:0:null_domatch[Ite] → Cons:Nil:S:0:null_domatch[Ite]
S :: Cons:Nil:S:0:null_domatch[Ite] → Cons:Nil:S:0:null_domatch[Ite]
0 :: Cons:Nil:S:0:null_domatch[Ite]
null_and :: False:True:null_and:null_!EQ:null_eqNatList[Ite]:null_prefix
null_!EQ :: False:True:null_and:null_!EQ:null_eqNatList[Ite]:null_prefix
null_domatch[Ite] :: Cons:Nil:S:0:null_domatch[Ite]
null_eqNatList[Ite] :: False:True:null_and:null_!EQ:null_eqNatList[Ite]:null_prefix
null_prefix :: False:True:null_and:null_!EQ:null_eqNatList[Ite]:null_prefix

Rewrite Strategy: INNERMOST

(9) CpxTypedWeightedTrsToRntsProof (UPPER BOUND(ID) transformation)

Transformed the TRS into an over-approximating RNTS by (improved) Size Abstraction.
The constant constructors are abstracted as follows:

Nil => 1
False => 1
True => 2
0 => 0
null_and => 0
null_!EQ => 0
null_domatch[Ite] => 0
null_eqNatList[Ite] => 0
null_prefix => 0

(10) Obligation:

Complexity RNTS consisting of the following rules:

!EQ(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
!EQ(z, z') -{ 0 }→ 1 :|: z' = 1 + y, y >= 0, z = 0
!EQ(z, z') -{ 0 }→ 1 :|: x >= 0, z = 1 + x, z' = 0
!EQ(z, z') -{ 0 }→ 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1
!EQ(z, z') -{ 0 }→ !EQ(x, y) :|: z' = 1 + y, x >= 0, y >= 0, z = 1 + x
and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
and(z, z') -{ 0 }→ 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1
domatch(z, z', z'') -{ 2 }→ domatch[Ite](and(!EQ(x'5, x), prefix(xs'4, xs)), 1 + x'5 + xs'4, 1 + x + xs, n) :|: xs >= 0, n >= 0, z'' = n, z' = 1 + x + xs, x >= 0, z = 1 + x'5 + xs'4, xs'4 >= 0, x'5 >= 0
domatch(z, z', z'') -{ 2 }→ domatch[Ite](2, 1, 1 + x + xs, n) :|: xs >= 0, n >= 0, z'' = n, z' = 1 + x + xs, z = 1, x >= 0
domatch(z, z', z'') -{ 1 }→ domatch[Ite](0, patcs, 1 + x + xs, n) :|: patcs >= 0, xs >= 0, n >= 0, z'' = n, z' = 1 + x + xs, x >= 0, z = patcs
domatch(z, z', z'') -{ 1 }→ 1 :|: z = 1 + x + xs, xs >= 0, n >= 0, z'' = n, x >= 0, z' = 1
domatch(z, z', z'') -{ 1 }→ 1 + n + 1 :|: n >= 0, z'' = n, z = 1, z' = 1
domatch[Ite](z, z', z'', z1) -{ 0 }→ domatch(patcs, xs, 1 + n + (1 + 1 + 1)) :|: patcs >= 0, xs >= 0, n >= 0, z1 = n, z = 1, x >= 0, z' = patcs, z'' = 1 + x + xs
domatch[Ite](z, z', z'', z1) -{ 0 }→ 0 :|: z1 = v3, v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0, v3 >= 0
domatch[Ite](z, z', z'', z1) -{ 0 }→ 1 + n + domatch(patcs, xs, 1 + n + (1 + 1 + 1)) :|: z = 2, patcs >= 0, xs >= 0, n >= 0, z1 = n, x >= 0, z' = patcs, z'' = 1 + x + xs
eqNatList(z, z') -{ 1 }→ eqNatList[Ite](2, 0, ys, 0, xs) :|: xs >= 0, ys >= 0, z' = 1 + 0 + ys, z = 1 + 0 + xs
eqNatList(z, z') -{ 1 }→ eqNatList[Ite](1, 0, ys, 1 + x13, xs) :|: x13 >= 0, xs >= 0, ys >= 0, z' = 1 + 0 + ys, z = 1 + (1 + x13) + xs
eqNatList(z, z') -{ 1 }→ eqNatList[Ite](1, 1 + y2, ys, 0, xs) :|: xs >= 0, z' = 1 + (1 + y2) + ys, ys >= 0, z = 1 + 0 + xs, y2 >= 0
eqNatList(z, z') -{ 1 }→ eqNatList[Ite](0, y, ys, x, xs) :|: z = 1 + x + xs, xs >= 0, ys >= 0, x >= 0, y >= 0, z' = 1 + y + ys
eqNatList(z, z') -{ 1 }→ eqNatList[Ite](!EQ(x12, y1), 1 + y1, ys, 1 + x12, xs) :|: y1 >= 0, xs >= 0, z = 1 + (1 + x12) + xs, ys >= 0, z' = 1 + (1 + y1) + ys, x12 >= 0
eqNatList(z, z') -{ 1 }→ 2 :|: z = 1, z' = 1
eqNatList(z, z') -{ 1 }→ 1 :|: z = 1 + x + xs, xs >= 0, x >= 0, z' = 1
eqNatList(z, z') -{ 1 }→ 1 :|: z = 1, ys >= 0, y >= 0, z' = 1 + y + ys
eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }→ eqNatList(xs, ys) :|: z = 2, xs >= 0, ys >= 0, y >= 0, x >= 0, z'' = ys, z' = y, z2 = xs, z1 = x
eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }→ 1 :|: xs >= 0, z = 1, ys >= 0, y >= 0, x >= 0, z'' = ys, z' = y, z2 = xs, z1 = x
eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }→ 0 :|: z1 = v3, v0 >= 0, v4 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, z2 = v4, v2 >= 0, v3 >= 0
notEmpty(z) -{ 1 }→ 2 :|: z = 1 + x + xs, xs >= 0, x >= 0
notEmpty(z) -{ 1 }→ 1 :|: z = 1
prefix(z, z') -{ 2 }→ and(2, and(!EQ(x'3, x8), prefix(xs'2, xs7))) :|: x8 >= 0, x'3 >= 0, z' = 1 + 0 + (1 + x8 + xs7), xs7 >= 0, z = 1 + 0 + (1 + x'3 + xs'2), xs'2 >= 0
prefix(z, z') -{ 2 }→ and(2, 2) :|: xs >= 0, z' = 1 + 0 + xs, z = 1 + 0 + 1
prefix(z, z') -{ 2 }→ and(2, 1) :|: z = 1 + 0 + (1 + x9 + xs8), z' = 1 + 0 + 1, xs8 >= 0, x9 >= 0
prefix(z, z') -{ 1 }→ and(2, 0) :|: xs >= 0, z' = 1 + 0 + xs, z = 1 + 0 + xs', xs' >= 0
prefix(z, z') -{ 2 }→ and(1, and(!EQ(x'1, x4), prefix(xs''', xs3))) :|: z' = 1 + (1 + y'') + (1 + x4 + xs3), x4 >= 0, x'1 >= 0, z = 1 + 0 + (1 + x'1 + xs'''), y'' >= 0, xs''' >= 0, xs3 >= 0
prefix(z, z') -{ 2 }→ and(1, and(!EQ(x'2, x6), prefix(xs'1, xs5))) :|: x1 >= 0, z' = 1 + 0 + (1 + x6 + xs5), x'2 >= 0, x6 >= 0, z = 1 + (1 + x1) + (1 + x'2 + xs'1), xs5 >= 0, xs'1 >= 0
prefix(z, z') -{ 2 }→ and(1, 2) :|: xs >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, z = 1 + 0 + 1
prefix(z, z') -{ 2 }→ and(1, 2) :|: xs >= 0, x1 >= 0, z' = 1 + 0 + xs, z = 1 + (1 + x1) + 1
prefix(z, z') -{ 2 }→ and(1, 1) :|: x5 >= 0, z' = 1 + (1 + y'') + 1, y'' >= 0, xs4 >= 0, z = 1 + 0 + (1 + x5 + xs4)
prefix(z, z') -{ 2 }→ and(1, 1) :|: xs6 >= 0, x1 >= 0, z' = 1 + 0 + 1, z = 1 + (1 + x1) + (1 + x7 + xs6), x7 >= 0
prefix(z, z') -{ 1 }→ and(1, 0) :|: xs >= 0, z = 1 + 0 + xs', xs' >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0
prefix(z, z') -{ 1 }→ and(1, 0) :|: xs >= 0, x1 >= 0, z' = 1 + 0 + xs, z = 1 + (1 + x1) + xs', xs' >= 0
prefix(z, z') -{ 2 }→ and(0, and(!EQ(x'4, x10), prefix(xs'3, xs9))) :|: z = 1 + x' + (1 + x'4 + xs'3), z' = 1 + x + (1 + x10 + xs9), x' >= 0, x >= 0, x'4 >= 0, x10 >= 0, xs9 >= 0, xs'3 >= 0
prefix(z, z') -{ 2 }→ and(0, 2) :|: xs >= 0, z' = 1 + x + xs, x' >= 0, x >= 0, z = 1 + x' + 1
prefix(z, z') -{ 2 }→ and(0, 1) :|: z = 1 + x' + (1 + x11 + xs10), x' >= 0, x >= 0, x11 >= 0, xs10 >= 0, z' = 1 + x + 1
prefix(z, z') -{ 1 }→ and(0, 0) :|: xs >= 0, z' = 1 + x + xs, x' >= 0, xs' >= 0, x >= 0, z = 1 + x' + xs'
prefix(z, z') -{ 2 }→ and(!EQ(x'', y'), and(!EQ(x''', x2), prefix(xs'', xs1))) :|: z = 1 + (1 + x'') + (1 + x''' + xs''), z' = 1 + (1 + y') + (1 + x2 + xs1), xs'' >= 0, y' >= 0, xs1 >= 0, x''' >= 0, x'' >= 0, x2 >= 0
prefix(z, z') -{ 2 }→ and(!EQ(x'', y'), 2) :|: xs >= 0, z' = 1 + (1 + y') + xs, y' >= 0, x'' >= 0, z = 1 + (1 + x'') + 1
prefix(z, z') -{ 2 }→ and(!EQ(x'', y'), 1) :|: xs2 >= 0, z = 1 + (1 + x'') + (1 + x3 + xs2), y' >= 0, x'' >= 0, z' = 1 + (1 + y') + 1, x3 >= 0
prefix(z, z') -{ 1 }→ and(!EQ(x'', y'), 0) :|: z = 1 + (1 + x'') + xs', xs >= 0, z' = 1 + (1 + y') + xs, xs' >= 0, y' >= 0, x'' >= 0
prefix(z, z') -{ 1 }→ 2 :|: z = 1, z' = cs, cs >= 0
prefix(z, z') -{ 1 }→ 1 :|: z = 1 + x + xs, xs >= 0, x >= 0, z' = 1
prefix(z, z') -{ 0 }→ 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1
strmatch(z, z') -{ 1 }→ domatch(patstr, str, 1) :|: z' = str, patstr >= 0, str >= 0, z = patstr

(11) InliningProof (UPPER BOUND(ID) transformation)

Inlined the following terminating rules on right-hand sides where appropriate:

and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
and(z, z') -{ 0 }→ 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1

(12) Obligation:

Complexity RNTS consisting of the following rules:

!EQ(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
!EQ(z, z') -{ 0 }→ 1 :|: z' = 1 + y, y >= 0, z = 0
!EQ(z, z') -{ 0 }→ 1 :|: x >= 0, z = 1 + x, z' = 0
!EQ(z, z') -{ 0 }→ 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1
!EQ(z, z') -{ 0 }→ !EQ(x, y) :|: z' = 1 + y, x >= 0, y >= 0, z = 1 + x
and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
and(z, z') -{ 0 }→ 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1
domatch(z, z', z'') -{ 2 }→ domatch[Ite](and(!EQ(x'5, x), prefix(xs'4, xs)), 1 + x'5 + xs'4, 1 + x + xs, n) :|: xs >= 0, n >= 0, z'' = n, z' = 1 + x + xs, x >= 0, z = 1 + x'5 + xs'4, xs'4 >= 0, x'5 >= 0
domatch(z, z', z'') -{ 2 }→ domatch[Ite](2, 1, 1 + x + xs, n) :|: xs >= 0, n >= 0, z'' = n, z' = 1 + x + xs, z = 1, x >= 0
domatch(z, z', z'') -{ 1 }→ domatch[Ite](0, patcs, 1 + x + xs, n) :|: patcs >= 0, xs >= 0, n >= 0, z'' = n, z' = 1 + x + xs, x >= 0, z = patcs
domatch(z, z', z'') -{ 1 }→ 1 :|: z = 1 + x + xs, xs >= 0, n >= 0, z'' = n, x >= 0, z' = 1
domatch(z, z', z'') -{ 1 }→ 1 + n + 1 :|: n >= 0, z'' = n, z = 1, z' = 1
domatch[Ite](z, z', z'', z1) -{ 0 }→ domatch(patcs, xs, 1 + n + (1 + 1 + 1)) :|: patcs >= 0, xs >= 0, n >= 0, z1 = n, z = 1, x >= 0, z' = patcs, z'' = 1 + x + xs
domatch[Ite](z, z', z'', z1) -{ 0 }→ 0 :|: z1 = v3, v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0, v3 >= 0
domatch[Ite](z, z', z'', z1) -{ 0 }→ 1 + n + domatch(patcs, xs, 1 + n + (1 + 1 + 1)) :|: z = 2, patcs >= 0, xs >= 0, n >= 0, z1 = n, x >= 0, z' = patcs, z'' = 1 + x + xs
eqNatList(z, z') -{ 1 }→ eqNatList[Ite](2, 0, ys, 0, xs) :|: xs >= 0, ys >= 0, z' = 1 + 0 + ys, z = 1 + 0 + xs
eqNatList(z, z') -{ 1 }→ eqNatList[Ite](1, 0, ys, 1 + x13, xs) :|: x13 >= 0, xs >= 0, ys >= 0, z' = 1 + 0 + ys, z = 1 + (1 + x13) + xs
eqNatList(z, z') -{ 1 }→ eqNatList[Ite](1, 1 + y2, ys, 0, xs) :|: xs >= 0, z' = 1 + (1 + y2) + ys, ys >= 0, z = 1 + 0 + xs, y2 >= 0
eqNatList(z, z') -{ 1 }→ eqNatList[Ite](0, y, ys, x, xs) :|: z = 1 + x + xs, xs >= 0, ys >= 0, x >= 0, y >= 0, z' = 1 + y + ys
eqNatList(z, z') -{ 1 }→ eqNatList[Ite](!EQ(x12, y1), 1 + y1, ys, 1 + x12, xs) :|: y1 >= 0, xs >= 0, z = 1 + (1 + x12) + xs, ys >= 0, z' = 1 + (1 + y1) + ys, x12 >= 0
eqNatList(z, z') -{ 1 }→ 2 :|: z = 1, z' = 1
eqNatList(z, z') -{ 1 }→ 1 :|: z = 1 + x + xs, xs >= 0, x >= 0, z' = 1
eqNatList(z, z') -{ 1 }→ 1 :|: z = 1, ys >= 0, y >= 0, z' = 1 + y + ys
eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }→ eqNatList(xs, ys) :|: z = 2, xs >= 0, ys >= 0, y >= 0, x >= 0, z'' = ys, z' = y, z2 = xs, z1 = x
eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }→ 1 :|: xs >= 0, z = 1, ys >= 0, y >= 0, x >= 0, z'' = ys, z' = y, z2 = xs, z1 = x
eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }→ 0 :|: z1 = v3, v0 >= 0, v4 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, z2 = v4, v2 >= 0, v3 >= 0
notEmpty(z) -{ 1 }→ 2 :|: z = 1 + x + xs, xs >= 0, x >= 0
notEmpty(z) -{ 1 }→ 1 :|: z = 1
prefix(z, z') -{ 2 }→ and(2, and(!EQ(x'3, x8), prefix(xs'2, xs7))) :|: x8 >= 0, x'3 >= 0, z' = 1 + 0 + (1 + x8 + xs7), xs7 >= 0, z = 1 + 0 + (1 + x'3 + xs'2), xs'2 >= 0
prefix(z, z') -{ 2 }→ and(1, and(!EQ(x'1, x4), prefix(xs''', xs3))) :|: z' = 1 + (1 + y'') + (1 + x4 + xs3), x4 >= 0, x'1 >= 0, z = 1 + 0 + (1 + x'1 + xs'''), y'' >= 0, xs''' >= 0, xs3 >= 0
prefix(z, z') -{ 2 }→ and(1, and(!EQ(x'2, x6), prefix(xs'1, xs5))) :|: x1 >= 0, z' = 1 + 0 + (1 + x6 + xs5), x'2 >= 0, x6 >= 0, z = 1 + (1 + x1) + (1 + x'2 + xs'1), xs5 >= 0, xs'1 >= 0
prefix(z, z') -{ 2 }→ and(0, and(!EQ(x'4, x10), prefix(xs'3, xs9))) :|: z = 1 + x' + (1 + x'4 + xs'3), z' = 1 + x + (1 + x10 + xs9), x' >= 0, x >= 0, x'4 >= 0, x10 >= 0, xs9 >= 0, xs'3 >= 0
prefix(z, z') -{ 2 }→ and(!EQ(x'', y'), and(!EQ(x''', x2), prefix(xs'', xs1))) :|: z = 1 + (1 + x'') + (1 + x''' + xs''), z' = 1 + (1 + y') + (1 + x2 + xs1), xs'' >= 0, y' >= 0, xs1 >= 0, x''' >= 0, x'' >= 0, x2 >= 0
prefix(z, z') -{ 2 }→ and(!EQ(x'', y'), 2) :|: xs >= 0, z' = 1 + (1 + y') + xs, y' >= 0, x'' >= 0, z = 1 + (1 + x'') + 1
prefix(z, z') -{ 2 }→ and(!EQ(x'', y'), 1) :|: xs2 >= 0, z = 1 + (1 + x'') + (1 + x3 + xs2), y' >= 0, x'' >= 0, z' = 1 + (1 + y') + 1, x3 >= 0
prefix(z, z') -{ 1 }→ and(!EQ(x'', y'), 0) :|: z = 1 + (1 + x'') + xs', xs >= 0, z' = 1 + (1 + y') + xs, xs' >= 0, y' >= 0, x'' >= 0
prefix(z, z') -{ 1 }→ 2 :|: z = 1, z' = cs, cs >= 0
prefix(z, z') -{ 2 }→ 2 :|: xs >= 0, z' = 1 + 0 + xs, z = 1 + 0 + 1, 2 = 2
prefix(z, z') -{ 1 }→ 1 :|: z = 1 + x + xs, xs >= 0, x >= 0, z' = 1
prefix(z, z') -{ 2 }→ 1 :|: x5 >= 0, z' = 1 + (1 + y'') + 1, y'' >= 0, xs4 >= 0, z = 1 + 0 + (1 + x5 + xs4), 1 = 1
prefix(z, z') -{ 2 }→ 1 :|: xs >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, z = 1 + 0 + 1, 2 = 2, 1 = 1
prefix(z, z') -{ 2 }→ 1 :|: xs6 >= 0, x1 >= 0, z' = 1 + 0 + 1, z = 1 + (1 + x1) + (1 + x7 + xs6), x7 >= 0, 1 = 1
prefix(z, z') -{ 2 }→ 1 :|: xs >= 0, x1 >= 0, z' = 1 + 0 + xs, z = 1 + (1 + x1) + 1, 2 = 2, 1 = 1
prefix(z, z') -{ 2 }→ 1 :|: z = 1 + 0 + (1 + x9 + xs8), z' = 1 + 0 + 1, xs8 >= 0, x9 >= 0, 2 = 2, 1 = 1
prefix(z, z') -{ 0 }→ 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1
prefix(z, z') -{ 2 }→ 0 :|: x5 >= 0, z' = 1 + (1 + y'') + 1, y'' >= 0, xs4 >= 0, z = 1 + 0 + (1 + x5 + xs4), v0 >= 0, v1 >= 0, 1 = v0, 1 = v1
prefix(z, z') -{ 2 }→ 0 :|: xs >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, z = 1 + 0 + 1, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1
prefix(z, z') -{ 1 }→ 0 :|: xs >= 0, z = 1 + 0 + xs', xs' >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1
prefix(z, z') -{ 2 }→ 0 :|: xs6 >= 0, x1 >= 0, z' = 1 + 0 + 1, z = 1 + (1 + x1) + (1 + x7 + xs6), x7 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 1 = v1
prefix(z, z') -{ 2 }→ 0 :|: xs >= 0, x1 >= 0, z' = 1 + 0 + xs, z = 1 + (1 + x1) + 1, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1
prefix(z, z') -{ 1 }→ 0 :|: xs >= 0, x1 >= 0, z' = 1 + 0 + xs, z = 1 + (1 + x1) + xs', xs' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1
prefix(z, z') -{ 2 }→ 0 :|: z = 1 + 0 + (1 + x9 + xs8), z' = 1 + 0 + 1, xs8 >= 0, x9 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 1 = v1
prefix(z, z') -{ 2 }→ 0 :|: xs >= 0, z' = 1 + 0 + xs, z = 1 + 0 + 1, v0 >= 0, v1 >= 0, 2 = v0, 2 = v1
prefix(z, z') -{ 1 }→ 0 :|: xs >= 0, z' = 1 + 0 + xs, z = 1 + 0 + xs', xs' >= 0, v0 >= 0, v1 >= 0, 2 = v0, 0 = v1
prefix(z, z') -{ 2 }→ 0 :|: z = 1 + x' + (1 + x11 + xs10), x' >= 0, x >= 0, x11 >= 0, xs10 >= 0, z' = 1 + x + 1, v0 >= 0, v1 >= 0, 0 = v0, 1 = v1
prefix(z, z') -{ 2 }→ 0 :|: xs >= 0, z' = 1 + x + xs, x' >= 0, x >= 0, z = 1 + x' + 1, v0 >= 0, v1 >= 0, 0 = v0, 2 = v1
prefix(z, z') -{ 1 }→ 0 :|: xs >= 0, z' = 1 + x + xs, x' >= 0, xs' >= 0, x >= 0, z = 1 + x' + xs', v0 >= 0, v1 >= 0, 0 = v0, 0 = v1
strmatch(z, z') -{ 1 }→ domatch(patstr, str, 1) :|: z' = str, patstr >= 0, str >= 0, z = patstr

(13) SimplificationProof (BOTH BOUNDS(ID, ID) transformation)

Simplified the RNTS by moving equalities from the constraints into the right-hand sides.

(14) Obligation:

Complexity RNTS consisting of the following rules:

!EQ(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
!EQ(z, z') -{ 0 }→ 1 :|: z' - 1 >= 0, z = 0
!EQ(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
!EQ(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
!EQ(z, z') -{ 0 }→ !EQ(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
domatch(z, z', z'') -{ 2 }→ domatch[Ite](and(!EQ(x'5, x), prefix(xs'4, xs)), 1 + x'5 + xs'4, 1 + x + xs, z'') :|: xs >= 0, z'' >= 0, z' = 1 + x + xs, x >= 0, z = 1 + x'5 + xs'4, xs'4 >= 0, x'5 >= 0
domatch(z, z', z'') -{ 2 }→ domatch[Ite](2, 1, 1 + x + xs, z'') :|: xs >= 0, z'' >= 0, z' = 1 + x + xs, z = 1, x >= 0
domatch(z, z', z'') -{ 1 }→ domatch[Ite](0, z, 1 + x + xs, z'') :|: z >= 0, xs >= 0, z'' >= 0, z' = 1 + x + xs, x >= 0
domatch(z, z', z'') -{ 1 }→ 1 :|: z = 1 + x + xs, xs >= 0, z'' >= 0, x >= 0, z' = 1
domatch(z, z', z'') -{ 1 }→ 1 + z'' + 1 :|: z'' >= 0, z = 1, z' = 1
domatch[Ite](z, z', z'', z1) -{ 0 }→ domatch(z', xs, 1 + z1 + (1 + 1 + 1)) :|: z' >= 0, xs >= 0, z1 >= 0, z = 1, x >= 0, z'' = 1 + x + xs
domatch[Ite](z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
domatch[Ite](z, z', z'', z1) -{ 0 }→ 1 + z1 + domatch(z', xs, 1 + z1 + (1 + 1 + 1)) :|: z = 2, z' >= 0, xs >= 0, z1 >= 0, x >= 0, z'' = 1 + x + xs
eqNatList(z, z') -{ 1 }→ eqNatList[Ite](2, 0, z' - 1, 0, z - 1) :|: z - 1 >= 0, z' - 1 >= 0
eqNatList(z, z') -{ 1 }→ eqNatList[Ite](1, 0, z' - 1, 1 + x13, xs) :|: x13 >= 0, xs >= 0, z' - 1 >= 0, z = 1 + (1 + x13) + xs
eqNatList(z, z') -{ 1 }→ eqNatList[Ite](1, 1 + y2, ys, 0, z - 1) :|: z - 1 >= 0, z' = 1 + (1 + y2) + ys, ys >= 0, y2 >= 0
eqNatList(z, z') -{ 1 }→ eqNatList[Ite](0, y, ys, x, xs) :|: z = 1 + x + xs, xs >= 0, ys >= 0, x >= 0, y >= 0, z' = 1 + y + ys
eqNatList(z, z') -{ 1 }→ eqNatList[Ite](!EQ(x12, y1), 1 + y1, ys, 1 + x12, xs) :|: y1 >= 0, xs >= 0, z = 1 + (1 + x12) + xs, ys >= 0, z' = 1 + (1 + y1) + ys, x12 >= 0
eqNatList(z, z') -{ 1 }→ 2 :|: z = 1, z' = 1
eqNatList(z, z') -{ 1 }→ 1 :|: z = 1 + x + xs, xs >= 0, x >= 0, z' = 1
eqNatList(z, z') -{ 1 }→ 1 :|: z = 1, ys >= 0, y >= 0, z' = 1 + y + ys
eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }→ eqNatList(z2, z'') :|: z = 2, z2 >= 0, z'' >= 0, z' >= 0, z1 >= 0
eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }→ 1 :|: z2 >= 0, z = 1, z'' >= 0, z' >= 0, z1 >= 0
eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }→ 0 :|: z >= 0, z2 >= 0, z' >= 0, z'' >= 0, z1 >= 0
notEmpty(z) -{ 1 }→ 2 :|: z = 1 + x + xs, xs >= 0, x >= 0
notEmpty(z) -{ 1 }→ 1 :|: z = 1
prefix(z, z') -{ 2 }→ and(2, and(!EQ(x'3, x8), prefix(xs'2, xs7))) :|: x8 >= 0, x'3 >= 0, z' = 1 + 0 + (1 + x8 + xs7), xs7 >= 0, z = 1 + 0 + (1 + x'3 + xs'2), xs'2 >= 0
prefix(z, z') -{ 2 }→ and(1, and(!EQ(x'1, x4), prefix(xs''', xs3))) :|: z' = 1 + (1 + y'') + (1 + x4 + xs3), x4 >= 0, x'1 >= 0, z = 1 + 0 + (1 + x'1 + xs'''), y'' >= 0, xs''' >= 0, xs3 >= 0
prefix(z, z') -{ 2 }→ and(1, and(!EQ(x'2, x6), prefix(xs'1, xs5))) :|: x1 >= 0, z' = 1 + 0 + (1 + x6 + xs5), x'2 >= 0, x6 >= 0, z = 1 + (1 + x1) + (1 + x'2 + xs'1), xs5 >= 0, xs'1 >= 0
prefix(z, z') -{ 2 }→ and(0, and(!EQ(x'4, x10), prefix(xs'3, xs9))) :|: z = 1 + x' + (1 + x'4 + xs'3), z' = 1 + x + (1 + x10 + xs9), x' >= 0, x >= 0, x'4 >= 0, x10 >= 0, xs9 >= 0, xs'3 >= 0
prefix(z, z') -{ 2 }→ and(!EQ(x'', y'), and(!EQ(x''', x2), prefix(xs'', xs1))) :|: z = 1 + (1 + x'') + (1 + x''' + xs''), z' = 1 + (1 + y') + (1 + x2 + xs1), xs'' >= 0, y' >= 0, xs1 >= 0, x''' >= 0, x'' >= 0, x2 >= 0
prefix(z, z') -{ 1 }→ and(!EQ(x'', y'), 0) :|: z = 1 + (1 + x'') + xs', xs >= 0, z' = 1 + (1 + y') + xs, xs' >= 0, y' >= 0, x'' >= 0
prefix(z, z') -{ 2 }→ and(!EQ(x'', z' - 3), 1) :|: xs2 >= 0, z = 1 + (1 + x'') + (1 + x3 + xs2), z' - 3 >= 0, x'' >= 0, x3 >= 0
prefix(z, z') -{ 2 }→ and(!EQ(z - 3, y'), 2) :|: xs >= 0, z' = 1 + (1 + y') + xs, y' >= 0, z - 3 >= 0
prefix(z, z') -{ 1 }→ 2 :|: z = 1, z' >= 0
prefix(z, z') -{ 2 }→ 2 :|: z' - 1 >= 0, z = 1 + 0 + 1, 2 = 2
prefix(z, z') -{ 1 }→ 1 :|: z = 1 + x + xs, xs >= 0, x >= 0, z' = 1
prefix(z, z') -{ 2 }→ 1 :|: x5 >= 0, z' - 3 >= 0, xs4 >= 0, z = 1 + 0 + (1 + x5 + xs4), 1 = 1
prefix(z, z') -{ 2 }→ 1 :|: xs >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, z = 1 + 0 + 1, 2 = 2, 1 = 1
prefix(z, z') -{ 2 }→ 1 :|: xs6 >= 0, x1 >= 0, z' = 1 + 0 + 1, z = 1 + (1 + x1) + (1 + x7 + xs6), x7 >= 0, 1 = 1
prefix(z, z') -{ 2 }→ 1 :|: z' - 1 >= 0, z - 3 >= 0, 2 = 2, 1 = 1
prefix(z, z') -{ 2 }→ 1 :|: z = 1 + 0 + (1 + x9 + xs8), z' = 1 + 0 + 1, xs8 >= 0, x9 >= 0, 2 = 2, 1 = 1
prefix(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
prefix(z, z') -{ 2 }→ 0 :|: x5 >= 0, z' - 3 >= 0, xs4 >= 0, z = 1 + 0 + (1 + x5 + xs4), v0 >= 0, v1 >= 0, 1 = v0, 1 = v1
prefix(z, z') -{ 2 }→ 0 :|: xs >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, z = 1 + 0 + 1, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1
prefix(z, z') -{ 1 }→ 0 :|: xs >= 0, z - 1 >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1
prefix(z, z') -{ 2 }→ 0 :|: xs6 >= 0, x1 >= 0, z' = 1 + 0 + 1, z = 1 + (1 + x1) + (1 + x7 + xs6), x7 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 1 = v1
prefix(z, z') -{ 2 }→ 0 :|: z' - 1 >= 0, z - 3 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1
prefix(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, x1 >= 0, z = 1 + (1 + x1) + xs', xs' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1
prefix(z, z') -{ 2 }→ 0 :|: z = 1 + 0 + (1 + x9 + xs8), z' = 1 + 0 + 1, xs8 >= 0, x9 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 1 = v1
prefix(z, z') -{ 2 }→ 0 :|: z' - 1 >= 0, z = 1 + 0 + 1, v0 >= 0, v1 >= 0, 2 = v0, 2 = v1
prefix(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 0 = v1
prefix(z, z') -{ 2 }→ 0 :|: z = 1 + x' + (1 + x11 + xs10), x' >= 0, z' - 2 >= 0, x11 >= 0, xs10 >= 0, v0 >= 0, v1 >= 0, 0 = v0, 1 = v1
prefix(z, z') -{ 2 }→ 0 :|: xs >= 0, z' = 1 + x + xs, z - 2 >= 0, x >= 0, v0 >= 0, v1 >= 0, 0 = v0, 2 = v1
prefix(z, z') -{ 1 }→ 0 :|: xs >= 0, z' = 1 + x + xs, x' >= 0, xs' >= 0, x >= 0, z = 1 + x' + xs', v0 >= 0, v1 >= 0, 0 = v0, 0 = v1
strmatch(z, z') -{ 1 }→ domatch(z, z', 1) :|: z >= 0, z' >= 0

(15) CpxRntsAnalysisOrderProof (BOTH BOUNDS(ID, ID) transformation)

Found the following analysis order by SCC decomposition:

{ notEmpty }
{ !EQ }
{ and }
{ eqNatList[Ite], eqNatList }
{ prefix }
{ domatch[Ite], domatch }
{ strmatch }

(16) Obligation:

Complexity RNTS consisting of the following rules:

!EQ(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
!EQ(z, z') -{ 0 }→ 1 :|: z' - 1 >= 0, z = 0
!EQ(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
!EQ(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
!EQ(z, z') -{ 0 }→ !EQ(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
domatch(z, z', z'') -{ 2 }→ domatch[Ite](and(!EQ(x'5, x), prefix(xs'4, xs)), 1 + x'5 + xs'4, 1 + x + xs, z'') :|: xs >= 0, z'' >= 0, z' = 1 + x + xs, x >= 0, z = 1 + x'5 + xs'4, xs'4 >= 0, x'5 >= 0
domatch(z, z', z'') -{ 2 }→ domatch[Ite](2, 1, 1 + x + xs, z'') :|: xs >= 0, z'' >= 0, z' = 1 + x + xs, z = 1, x >= 0
domatch(z, z', z'') -{ 1 }→ domatch[Ite](0, z, 1 + x + xs, z'') :|: z >= 0, xs >= 0, z'' >= 0, z' = 1 + x + xs, x >= 0
domatch(z, z', z'') -{ 1 }→ 1 :|: z = 1 + x + xs, xs >= 0, z'' >= 0, x >= 0, z' = 1
domatch(z, z', z'') -{ 1 }→ 1 + z'' + 1 :|: z'' >= 0, z = 1, z' = 1
domatch[Ite](z, z', z'', z1) -{ 0 }→ domatch(z', xs, 1 + z1 + (1 + 1 + 1)) :|: z' >= 0, xs >= 0, z1 >= 0, z = 1, x >= 0, z'' = 1 + x + xs
domatch[Ite](z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
domatch[Ite](z, z', z'', z1) -{ 0 }→ 1 + z1 + domatch(z', xs, 1 + z1 + (1 + 1 + 1)) :|: z = 2, z' >= 0, xs >= 0, z1 >= 0, x >= 0, z'' = 1 + x + xs
eqNatList(z, z') -{ 1 }→ eqNatList[Ite](2, 0, z' - 1, 0, z - 1) :|: z - 1 >= 0, z' - 1 >= 0
eqNatList(z, z') -{ 1 }→ eqNatList[Ite](1, 0, z' - 1, 1 + x13, xs) :|: x13 >= 0, xs >= 0, z' - 1 >= 0, z = 1 + (1 + x13) + xs
eqNatList(z, z') -{ 1 }→ eqNatList[Ite](1, 1 + y2, ys, 0, z - 1) :|: z - 1 >= 0, z' = 1 + (1 + y2) + ys, ys >= 0, y2 >= 0
eqNatList(z, z') -{ 1 }→ eqNatList[Ite](0, y, ys, x, xs) :|: z = 1 + x + xs, xs >= 0, ys >= 0, x >= 0, y >= 0, z' = 1 + y + ys
eqNatList(z, z') -{ 1 }→ eqNatList[Ite](!EQ(x12, y1), 1 + y1, ys, 1 + x12, xs) :|: y1 >= 0, xs >= 0, z = 1 + (1 + x12) + xs, ys >= 0, z' = 1 + (1 + y1) + ys, x12 >= 0
eqNatList(z, z') -{ 1 }→ 2 :|: z = 1, z' = 1
eqNatList(z, z') -{ 1 }→ 1 :|: z = 1 + x + xs, xs >= 0, x >= 0, z' = 1
eqNatList(z, z') -{ 1 }→ 1 :|: z = 1, ys >= 0, y >= 0, z' = 1 + y + ys
eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }→ eqNatList(z2, z'') :|: z = 2, z2 >= 0, z'' >= 0, z' >= 0, z1 >= 0
eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }→ 1 :|: z2 >= 0, z = 1, z'' >= 0, z' >= 0, z1 >= 0
eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }→ 0 :|: z >= 0, z2 >= 0, z' >= 0, z'' >= 0, z1 >= 0
notEmpty(z) -{ 1 }→ 2 :|: z = 1 + x + xs, xs >= 0, x >= 0
notEmpty(z) -{ 1 }→ 1 :|: z = 1
prefix(z, z') -{ 2 }→ and(2, and(!EQ(x'3, x8), prefix(xs'2, xs7))) :|: x8 >= 0, x'3 >= 0, z' = 1 + 0 + (1 + x8 + xs7), xs7 >= 0, z = 1 + 0 + (1 + x'3 + xs'2), xs'2 >= 0
prefix(z, z') -{ 2 }→ and(1, and(!EQ(x'1, x4), prefix(xs''', xs3))) :|: z' = 1 + (1 + y'') + (1 + x4 + xs3), x4 >= 0, x'1 >= 0, z = 1 + 0 + (1 + x'1 + xs'''), y'' >= 0, xs''' >= 0, xs3 >= 0
prefix(z, z') -{ 2 }→ and(1, and(!EQ(x'2, x6), prefix(xs'1, xs5))) :|: x1 >= 0, z' = 1 + 0 + (1 + x6 + xs5), x'2 >= 0, x6 >= 0, z = 1 + (1 + x1) + (1 + x'2 + xs'1), xs5 >= 0, xs'1 >= 0
prefix(z, z') -{ 2 }→ and(0, and(!EQ(x'4, x10), prefix(xs'3, xs9))) :|: z = 1 + x' + (1 + x'4 + xs'3), z' = 1 + x + (1 + x10 + xs9), x' >= 0, x >= 0, x'4 >= 0, x10 >= 0, xs9 >= 0, xs'3 >= 0
prefix(z, z') -{ 2 }→ and(!EQ(x'', y'), and(!EQ(x''', x2), prefix(xs'', xs1))) :|: z = 1 + (1 + x'') + (1 + x''' + xs''), z' = 1 + (1 + y') + (1 + x2 + xs1), xs'' >= 0, y' >= 0, xs1 >= 0, x''' >= 0, x'' >= 0, x2 >= 0
prefix(z, z') -{ 1 }→ and(!EQ(x'', y'), 0) :|: z = 1 + (1 + x'') + xs', xs >= 0, z' = 1 + (1 + y') + xs, xs' >= 0, y' >= 0, x'' >= 0
prefix(z, z') -{ 2 }→ and(!EQ(x'', z' - 3), 1) :|: xs2 >= 0, z = 1 + (1 + x'') + (1 + x3 + xs2), z' - 3 >= 0, x'' >= 0, x3 >= 0
prefix(z, z') -{ 2 }→ and(!EQ(z - 3, y'), 2) :|: xs >= 0, z' = 1 + (1 + y') + xs, y' >= 0, z - 3 >= 0
prefix(z, z') -{ 1 }→ 2 :|: z = 1, z' >= 0
prefix(z, z') -{ 2 }→ 2 :|: z' - 1 >= 0, z = 1 + 0 + 1, 2 = 2
prefix(z, z') -{ 1 }→ 1 :|: z = 1 + x + xs, xs >= 0, x >= 0, z' = 1
prefix(z, z') -{ 2 }→ 1 :|: x5 >= 0, z' - 3 >= 0, xs4 >= 0, z = 1 + 0 + (1 + x5 + xs4), 1 = 1
prefix(z, z') -{ 2 }→ 1 :|: xs >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, z = 1 + 0 + 1, 2 = 2, 1 = 1
prefix(z, z') -{ 2 }→ 1 :|: xs6 >= 0, x1 >= 0, z' = 1 + 0 + 1, z = 1 + (1 + x1) + (1 + x7 + xs6), x7 >= 0, 1 = 1
prefix(z, z') -{ 2 }→ 1 :|: z' - 1 >= 0, z - 3 >= 0, 2 = 2, 1 = 1
prefix(z, z') -{ 2 }→ 1 :|: z = 1 + 0 + (1 + x9 + xs8), z' = 1 + 0 + 1, xs8 >= 0, x9 >= 0, 2 = 2, 1 = 1
prefix(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
prefix(z, z') -{ 2 }→ 0 :|: x5 >= 0, z' - 3 >= 0, xs4 >= 0, z = 1 + 0 + (1 + x5 + xs4), v0 >= 0, v1 >= 0, 1 = v0, 1 = v1
prefix(z, z') -{ 2 }→ 0 :|: xs >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, z = 1 + 0 + 1, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1
prefix(z, z') -{ 1 }→ 0 :|: xs >= 0, z - 1 >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1
prefix(z, z') -{ 2 }→ 0 :|: xs6 >= 0, x1 >= 0, z' = 1 + 0 + 1, z = 1 + (1 + x1) + (1 + x7 + xs6), x7 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 1 = v1
prefix(z, z') -{ 2 }→ 0 :|: z' - 1 >= 0, z - 3 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1
prefix(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, x1 >= 0, z = 1 + (1 + x1) + xs', xs' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1
prefix(z, z') -{ 2 }→ 0 :|: z = 1 + 0 + (1 + x9 + xs8), z' = 1 + 0 + 1, xs8 >= 0, x9 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 1 = v1
prefix(z, z') -{ 2 }→ 0 :|: z' - 1 >= 0, z = 1 + 0 + 1, v0 >= 0, v1 >= 0, 2 = v0, 2 = v1
prefix(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 0 = v1
prefix(z, z') -{ 2 }→ 0 :|: z = 1 + x' + (1 + x11 + xs10), x' >= 0, z' - 2 >= 0, x11 >= 0, xs10 >= 0, v0 >= 0, v1 >= 0, 0 = v0, 1 = v1
prefix(z, z') -{ 2 }→ 0 :|: xs >= 0, z' = 1 + x + xs, z - 2 >= 0, x >= 0, v0 >= 0, v1 >= 0, 0 = v0, 2 = v1
prefix(z, z') -{ 1 }→ 0 :|: xs >= 0, z' = 1 + x + xs, x' >= 0, xs' >= 0, x >= 0, z = 1 + x' + xs', v0 >= 0, v1 >= 0, 0 = v0, 0 = v1
strmatch(z, z') -{ 1 }→ domatch(z, z', 1) :|: z >= 0, z' >= 0

Function symbols to be analyzed: {notEmpty}, {!EQ}, {and}, {eqNatList[Ite],eqNatList}, {prefix}, {domatch[Ite],domatch}, {strmatch}

(17) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed SIZE bound using CoFloCo for: notEmpty
after applying outer abstraction to obtain an ITS,
resulting in: O(1) with polynomial bound: 2

(18) Obligation:

Complexity RNTS consisting of the following rules:

!EQ(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
!EQ(z, z') -{ 0 }→ 1 :|: z' - 1 >= 0, z = 0
!EQ(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
!EQ(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
!EQ(z, z') -{ 0 }→ !EQ(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
domatch(z, z', z'') -{ 2 }→ domatch[Ite](and(!EQ(x'5, x), prefix(xs'4, xs)), 1 + x'5 + xs'4, 1 + x + xs, z'') :|: xs >= 0, z'' >= 0, z' = 1 + x + xs, x >= 0, z = 1 + x'5 + xs'4, xs'4 >= 0, x'5 >= 0
domatch(z, z', z'') -{ 2 }→ domatch[Ite](2, 1, 1 + x + xs, z'') :|: xs >= 0, z'' >= 0, z' = 1 + x + xs, z = 1, x >= 0
domatch(z, z', z'') -{ 1 }→ domatch[Ite](0, z, 1 + x + xs, z'') :|: z >= 0, xs >= 0, z'' >= 0, z' = 1 + x + xs, x >= 0
domatch(z, z', z'') -{ 1 }→ 1 :|: z = 1 + x + xs, xs >= 0, z'' >= 0, x >= 0, z' = 1
domatch(z, z', z'') -{ 1 }→ 1 + z'' + 1 :|: z'' >= 0, z = 1, z' = 1
domatch[Ite](z, z', z'', z1) -{ 0 }→ domatch(z', xs, 1 + z1 + (1 + 1 + 1)) :|: z' >= 0, xs >= 0, z1 >= 0, z = 1, x >= 0, z'' = 1 + x + xs
domatch[Ite](z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
domatch[Ite](z, z', z'', z1) -{ 0 }→ 1 + z1 + domatch(z', xs, 1 + z1 + (1 + 1 + 1)) :|: z = 2, z' >= 0, xs >= 0, z1 >= 0, x >= 0, z'' = 1 + x + xs
eqNatList(z, z') -{ 1 }→ eqNatList[Ite](2, 0, z' - 1, 0, z - 1) :|: z - 1 >= 0, z' - 1 >= 0
eqNatList(z, z') -{ 1 }→ eqNatList[Ite](1, 0, z' - 1, 1 + x13, xs) :|: x13 >= 0, xs >= 0, z' - 1 >= 0, z = 1 + (1 + x13) + xs
eqNatList(z, z') -{ 1 }→ eqNatList[Ite](1, 1 + y2, ys, 0, z - 1) :|: z - 1 >= 0, z' = 1 + (1 + y2) + ys, ys >= 0, y2 >= 0
eqNatList(z, z') -{ 1 }→ eqNatList[Ite](0, y, ys, x, xs) :|: z = 1 + x + xs, xs >= 0, ys >= 0, x >= 0, y >= 0, z' = 1 + y + ys
eqNatList(z, z') -{ 1 }→ eqNatList[Ite](!EQ(x12, y1), 1 + y1, ys, 1 + x12, xs) :|: y1 >= 0, xs >= 0, z = 1 + (1 + x12) + xs, ys >= 0, z' = 1 + (1 + y1) + ys, x12 >= 0
eqNatList(z, z') -{ 1 }→ 2 :|: z = 1, z' = 1
eqNatList(z, z') -{ 1 }→ 1 :|: z = 1 + x + xs, xs >= 0, x >= 0, z' = 1
eqNatList(z, z') -{ 1 }→ 1 :|: z = 1, ys >= 0, y >= 0, z' = 1 + y + ys
eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }→ eqNatList(z2, z'') :|: z = 2, z2 >= 0, z'' >= 0, z' >= 0, z1 >= 0
eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }→ 1 :|: z2 >= 0, z = 1, z'' >= 0, z' >= 0, z1 >= 0
eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }→ 0 :|: z >= 0, z2 >= 0, z' >= 0, z'' >= 0, z1 >= 0
notEmpty(z) -{ 1 }→ 2 :|: z = 1 + x + xs, xs >= 0, x >= 0
notEmpty(z) -{ 1 }→ 1 :|: z = 1
prefix(z, z') -{ 2 }→ and(2, and(!EQ(x'3, x8), prefix(xs'2, xs7))) :|: x8 >= 0, x'3 >= 0, z' = 1 + 0 + (1 + x8 + xs7), xs7 >= 0, z = 1 + 0 + (1 + x'3 + xs'2), xs'2 >= 0
prefix(z, z') -{ 2 }→ and(1, and(!EQ(x'1, x4), prefix(xs''', xs3))) :|: z' = 1 + (1 + y'') + (1 + x4 + xs3), x4 >= 0, x'1 >= 0, z = 1 + 0 + (1 + x'1 + xs'''), y'' >= 0, xs''' >= 0, xs3 >= 0
prefix(z, z') -{ 2 }→ and(1, and(!EQ(x'2, x6), prefix(xs'1, xs5))) :|: x1 >= 0, z' = 1 + 0 + (1 + x6 + xs5), x'2 >= 0, x6 >= 0, z = 1 + (1 + x1) + (1 + x'2 + xs'1), xs5 >= 0, xs'1 >= 0
prefix(z, z') -{ 2 }→ and(0, and(!EQ(x'4, x10), prefix(xs'3, xs9))) :|: z = 1 + x' + (1 + x'4 + xs'3), z' = 1 + x + (1 + x10 + xs9), x' >= 0, x >= 0, x'4 >= 0, x10 >= 0, xs9 >= 0, xs'3 >= 0
prefix(z, z') -{ 2 }→ and(!EQ(x'', y'), and(!EQ(x''', x2), prefix(xs'', xs1))) :|: z = 1 + (1 + x'') + (1 + x''' + xs''), z' = 1 + (1 + y') + (1 + x2 + xs1), xs'' >= 0, y' >= 0, xs1 >= 0, x''' >= 0, x'' >= 0, x2 >= 0
prefix(z, z') -{ 1 }→ and(!EQ(x'', y'), 0) :|: z = 1 + (1 + x'') + xs', xs >= 0, z' = 1 + (1 + y') + xs, xs' >= 0, y' >= 0, x'' >= 0
prefix(z, z') -{ 2 }→ and(!EQ(x'', z' - 3), 1) :|: xs2 >= 0, z = 1 + (1 + x'') + (1 + x3 + xs2), z' - 3 >= 0, x'' >= 0, x3 >= 0
prefix(z, z') -{ 2 }→ and(!EQ(z - 3, y'), 2) :|: xs >= 0, z' = 1 + (1 + y') + xs, y' >= 0, z - 3 >= 0
prefix(z, z') -{ 1 }→ 2 :|: z = 1, z' >= 0
prefix(z, z') -{ 2 }→ 2 :|: z' - 1 >= 0, z = 1 + 0 + 1, 2 = 2
prefix(z, z') -{ 1 }→ 1 :|: z = 1 + x + xs, xs >= 0, x >= 0, z' = 1
prefix(z, z') -{ 2 }→ 1 :|: x5 >= 0, z' - 3 >= 0, xs4 >= 0, z = 1 + 0 + (1 + x5 + xs4), 1 = 1
prefix(z, z') -{ 2 }→ 1 :|: xs >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, z = 1 + 0 + 1, 2 = 2, 1 = 1
prefix(z, z') -{ 2 }→ 1 :|: xs6 >= 0, x1 >= 0, z' = 1 + 0 + 1, z = 1 + (1 + x1) + (1 + x7 + xs6), x7 >= 0, 1 = 1
prefix(z, z') -{ 2 }→ 1 :|: z' - 1 >= 0, z - 3 >= 0, 2 = 2, 1 = 1
prefix(z, z') -{ 2 }→ 1 :|: z = 1 + 0 + (1 + x9 + xs8), z' = 1 + 0 + 1, xs8 >= 0, x9 >= 0, 2 = 2, 1 = 1
prefix(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
prefix(z, z') -{ 2 }→ 0 :|: x5 >= 0, z' - 3 >= 0, xs4 >= 0, z = 1 + 0 + (1 + x5 + xs4), v0 >= 0, v1 >= 0, 1 = v0, 1 = v1
prefix(z, z') -{ 2 }→ 0 :|: xs >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, z = 1 + 0 + 1, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1
prefix(z, z') -{ 1 }→ 0 :|: xs >= 0, z - 1 >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1
prefix(z, z') -{ 2 }→ 0 :|: xs6 >= 0, x1 >= 0, z' = 1 + 0 + 1, z = 1 + (1 + x1) + (1 + x7 + xs6), x7 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 1 = v1
prefix(z, z') -{ 2 }→ 0 :|: z' - 1 >= 0, z - 3 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1
prefix(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, x1 >= 0, z = 1 + (1 + x1) + xs', xs' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1
prefix(z, z') -{ 2 }→ 0 :|: z = 1 + 0 + (1 + x9 + xs8), z' = 1 + 0 + 1, xs8 >= 0, x9 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 1 = v1
prefix(z, z') -{ 2 }→ 0 :|: z' - 1 >= 0, z = 1 + 0 + 1, v0 >= 0, v1 >= 0, 2 = v0, 2 = v1
prefix(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 0 = v1
prefix(z, z') -{ 2 }→ 0 :|: z = 1 + x' + (1 + x11 + xs10), x' >= 0, z' - 2 >= 0, x11 >= 0, xs10 >= 0, v0 >= 0, v1 >= 0, 0 = v0, 1 = v1
prefix(z, z') -{ 2 }→ 0 :|: xs >= 0, z' = 1 + x + xs, z - 2 >= 0, x >= 0, v0 >= 0, v1 >= 0, 0 = v0, 2 = v1
prefix(z, z') -{ 1 }→ 0 :|: xs >= 0, z' = 1 + x + xs, x' >= 0, xs' >= 0, x >= 0, z = 1 + x' + xs', v0 >= 0, v1 >= 0, 0 = v0, 0 = v1
strmatch(z, z') -{ 1 }→ domatch(z, z', 1) :|: z >= 0, z' >= 0

Function symbols to be analyzed: {notEmpty}, {!EQ}, {and}, {eqNatList[Ite],eqNatList}, {prefix}, {domatch[Ite],domatch}, {strmatch}
Previous analysis results are:
notEmpty: runtime: ?, size: O(1) [2]

(19) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed RUNTIME bound using CoFloCo for: notEmpty
after applying outer abstraction to obtain an ITS,
resulting in: O(1) with polynomial bound: 1

(20) Obligation:

Complexity RNTS consisting of the following rules:

!EQ(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
!EQ(z, z') -{ 0 }→ 1 :|: z' - 1 >= 0, z = 0
!EQ(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
!EQ(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
!EQ(z, z') -{ 0 }→ !EQ(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
domatch(z, z', z'') -{ 2 }→ domatch[Ite](and(!EQ(x'5, x), prefix(xs'4, xs)), 1 + x'5 + xs'4, 1 + x + xs, z'') :|: xs >= 0, z'' >= 0, z' = 1 + x + xs, x >= 0, z = 1 + x'5 + xs'4, xs'4 >= 0, x'5 >= 0
domatch(z, z', z'') -{ 2 }→ domatch[Ite](2, 1, 1 + x + xs, z'') :|: xs >= 0, z'' >= 0, z' = 1 + x + xs, z = 1, x >= 0
domatch(z, z', z'') -{ 1 }→ domatch[Ite](0, z, 1 + x + xs, z'') :|: z >= 0, xs >= 0, z'' >= 0, z' = 1 + x + xs, x >= 0
domatch(z, z', z'') -{ 1 }→ 1 :|: z = 1 + x + xs, xs >= 0, z'' >= 0, x >= 0, z' = 1
domatch(z, z', z'') -{ 1 }→ 1 + z'' + 1 :|: z'' >= 0, z = 1, z' = 1
domatch[Ite](z, z', z'', z1) -{ 0 }→ domatch(z', xs, 1 + z1 + (1 + 1 + 1)) :|: z' >= 0, xs >= 0, z1 >= 0, z = 1, x >= 0, z'' = 1 + x + xs
domatch[Ite](z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
domatch[Ite](z, z', z'', z1) -{ 0 }→ 1 + z1 + domatch(z', xs, 1 + z1 + (1 + 1 + 1)) :|: z = 2, z' >= 0, xs >= 0, z1 >= 0, x >= 0, z'' = 1 + x + xs
eqNatList(z, z') -{ 1 }→ eqNatList[Ite](2, 0, z' - 1, 0, z - 1) :|: z - 1 >= 0, z' - 1 >= 0
eqNatList(z, z') -{ 1 }→ eqNatList[Ite](1, 0, z' - 1, 1 + x13, xs) :|: x13 >= 0, xs >= 0, z' - 1 >= 0, z = 1 + (1 + x13) + xs
eqNatList(z, z') -{ 1 }→ eqNatList[Ite](1, 1 + y2, ys, 0, z - 1) :|: z - 1 >= 0, z' = 1 + (1 + y2) + ys, ys >= 0, y2 >= 0
eqNatList(z, z') -{ 1 }→ eqNatList[Ite](0, y, ys, x, xs) :|: z = 1 + x + xs, xs >= 0, ys >= 0, x >= 0, y >= 0, z' = 1 + y + ys
eqNatList(z, z') -{ 1 }→ eqNatList[Ite](!EQ(x12, y1), 1 + y1, ys, 1 + x12, xs) :|: y1 >= 0, xs >= 0, z = 1 + (1 + x12) + xs, ys >= 0, z' = 1 + (1 + y1) + ys, x12 >= 0
eqNatList(z, z') -{ 1 }→ 2 :|: z = 1, z' = 1
eqNatList(z, z') -{ 1 }→ 1 :|: z = 1 + x + xs, xs >= 0, x >= 0, z' = 1
eqNatList(z, z') -{ 1 }→ 1 :|: z = 1, ys >= 0, y >= 0, z' = 1 + y + ys
eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }→ eqNatList(z2, z'') :|: z = 2, z2 >= 0, z'' >= 0, z' >= 0, z1 >= 0
eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }→ 1 :|: z2 >= 0, z = 1, z'' >= 0, z' >= 0, z1 >= 0
eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }→ 0 :|: z >= 0, z2 >= 0, z' >= 0, z'' >= 0, z1 >= 0
notEmpty(z) -{ 1 }→ 2 :|: z = 1 + x + xs, xs >= 0, x >= 0
notEmpty(z) -{ 1 }→ 1 :|: z = 1
prefix(z, z') -{ 2 }→ and(2, and(!EQ(x'3, x8), prefix(xs'2, xs7))) :|: x8 >= 0, x'3 >= 0, z' = 1 + 0 + (1 + x8 + xs7), xs7 >= 0, z = 1 + 0 + (1 + x'3 + xs'2), xs'2 >= 0
prefix(z, z') -{ 2 }→ and(1, and(!EQ(x'1, x4), prefix(xs''', xs3))) :|: z' = 1 + (1 + y'') + (1 + x4 + xs3), x4 >= 0, x'1 >= 0, z = 1 + 0 + (1 + x'1 + xs'''), y'' >= 0, xs''' >= 0, xs3 >= 0
prefix(z, z') -{ 2 }→ and(1, and(!EQ(x'2, x6), prefix(xs'1, xs5))) :|: x1 >= 0, z' = 1 + 0 + (1 + x6 + xs5), x'2 >= 0, x6 >= 0, z = 1 + (1 + x1) + (1 + x'2 + xs'1), xs5 >= 0, xs'1 >= 0
prefix(z, z') -{ 2 }→ and(0, and(!EQ(x'4, x10), prefix(xs'3, xs9))) :|: z = 1 + x' + (1 + x'4 + xs'3), z' = 1 + x + (1 + x10 + xs9), x' >= 0, x >= 0, x'4 >= 0, x10 >= 0, xs9 >= 0, xs'3 >= 0
prefix(z, z') -{ 2 }→ and(!EQ(x'', y'), and(!EQ(x''', x2), prefix(xs'', xs1))) :|: z = 1 + (1 + x'') + (1 + x''' + xs''), z' = 1 + (1 + y') + (1 + x2 + xs1), xs'' >= 0, y' >= 0, xs1 >= 0, x''' >= 0, x'' >= 0, x2 >= 0
prefix(z, z') -{ 1 }→ and(!EQ(x'', y'), 0) :|: z = 1 + (1 + x'') + xs', xs >= 0, z' = 1 + (1 + y') + xs, xs' >= 0, y' >= 0, x'' >= 0
prefix(z, z') -{ 2 }→ and(!EQ(x'', z' - 3), 1) :|: xs2 >= 0, z = 1 + (1 + x'') + (1 + x3 + xs2), z' - 3 >= 0, x'' >= 0, x3 >= 0
prefix(z, z') -{ 2 }→ and(!EQ(z - 3, y'), 2) :|: xs >= 0, z' = 1 + (1 + y') + xs, y' >= 0, z - 3 >= 0
prefix(z, z') -{ 1 }→ 2 :|: z = 1, z' >= 0
prefix(z, z') -{ 2 }→ 2 :|: z' - 1 >= 0, z = 1 + 0 + 1, 2 = 2
prefix(z, z') -{ 1 }→ 1 :|: z = 1 + x + xs, xs >= 0, x >= 0, z' = 1
prefix(z, z') -{ 2 }→ 1 :|: x5 >= 0, z' - 3 >= 0, xs4 >= 0, z = 1 + 0 + (1 + x5 + xs4), 1 = 1
prefix(z, z') -{ 2 }→ 1 :|: xs >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, z = 1 + 0 + 1, 2 = 2, 1 = 1
prefix(z, z') -{ 2 }→ 1 :|: xs6 >= 0, x1 >= 0, z' = 1 + 0 + 1, z = 1 + (1 + x1) + (1 + x7 + xs6), x7 >= 0, 1 = 1
prefix(z, z') -{ 2 }→ 1 :|: z' - 1 >= 0, z - 3 >= 0, 2 = 2, 1 = 1
prefix(z, z') -{ 2 }→ 1 :|: z = 1 + 0 + (1 + x9 + xs8), z' = 1 + 0 + 1, xs8 >= 0, x9 >= 0, 2 = 2, 1 = 1
prefix(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
prefix(z, z') -{ 2 }→ 0 :|: x5 >= 0, z' - 3 >= 0, xs4 >= 0, z = 1 + 0 + (1 + x5 + xs4), v0 >= 0, v1 >= 0, 1 = v0, 1 = v1
prefix(z, z') -{ 2 }→ 0 :|: xs >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, z = 1 + 0 + 1, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1
prefix(z, z') -{ 1 }→ 0 :|: xs >= 0, z - 1 >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1
prefix(z, z') -{ 2 }→ 0 :|: xs6 >= 0, x1 >= 0, z' = 1 + 0 + 1, z = 1 + (1 + x1) + (1 + x7 + xs6), x7 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 1 = v1
prefix(z, z') -{ 2 }→ 0 :|: z' - 1 >= 0, z - 3 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1
prefix(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, x1 >= 0, z = 1 + (1 + x1) + xs', xs' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1
prefix(z, z') -{ 2 }→ 0 :|: z = 1 + 0 + (1 + x9 + xs8), z' = 1 + 0 + 1, xs8 >= 0, x9 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 1 = v1
prefix(z, z') -{ 2 }→ 0 :|: z' - 1 >= 0, z = 1 + 0 + 1, v0 >= 0, v1 >= 0, 2 = v0, 2 = v1
prefix(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 0 = v1
prefix(z, z') -{ 2 }→ 0 :|: z = 1 + x' + (1 + x11 + xs10), x' >= 0, z' - 2 >= 0, x11 >= 0, xs10 >= 0, v0 >= 0, v1 >= 0, 0 = v0, 1 = v1
prefix(z, z') -{ 2 }→ 0 :|: xs >= 0, z' = 1 + x + xs, z - 2 >= 0, x >= 0, v0 >= 0, v1 >= 0, 0 = v0, 2 = v1
prefix(z, z') -{ 1 }→ 0 :|: xs >= 0, z' = 1 + x + xs, x' >= 0, xs' >= 0, x >= 0, z = 1 + x' + xs', v0 >= 0, v1 >= 0, 0 = v0, 0 = v1
strmatch(z, z') -{ 1 }→ domatch(z, z', 1) :|: z >= 0, z' >= 0

Function symbols to be analyzed: {!EQ}, {and}, {eqNatList[Ite],eqNatList}, {prefix}, {domatch[Ite],domatch}, {strmatch}
Previous analysis results are:
notEmpty: runtime: O(1) [1], size: O(1) [2]

(21) ResultPropagationProof (UPPER BOUND(ID) transformation)

Applied inner abstraction using the recently inferred runtime/size bounds where possible.

(22) Obligation:

Complexity RNTS consisting of the following rules:

!EQ(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
!EQ(z, z') -{ 0 }→ 1 :|: z' - 1 >= 0, z = 0
!EQ(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
!EQ(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
!EQ(z, z') -{ 0 }→ !EQ(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
domatch(z, z', z'') -{ 2 }→ domatch[Ite](and(!EQ(x'5, x), prefix(xs'4, xs)), 1 + x'5 + xs'4, 1 + x + xs, z'') :|: xs >= 0, z'' >= 0, z' = 1 + x + xs, x >= 0, z = 1 + x'5 + xs'4, xs'4 >= 0, x'5 >= 0
domatch(z, z', z'') -{ 2 }→ domatch[Ite](2, 1, 1 + x + xs, z'') :|: xs >= 0, z'' >= 0, z' = 1 + x + xs, z = 1, x >= 0
domatch(z, z', z'') -{ 1 }→ domatch[Ite](0, z, 1 + x + xs, z'') :|: z >= 0, xs >= 0, z'' >= 0, z' = 1 + x + xs, x >= 0
domatch(z, z', z'') -{ 1 }→ 1 :|: z = 1 + x + xs, xs >= 0, z'' >= 0, x >= 0, z' = 1
domatch(z, z', z'') -{ 1 }→ 1 + z'' + 1 :|: z'' >= 0, z = 1, z' = 1
domatch[Ite](z, z', z'', z1) -{ 0 }→ domatch(z', xs, 1 + z1 + (1 + 1 + 1)) :|: z' >= 0, xs >= 0, z1 >= 0, z = 1, x >= 0, z'' = 1 + x + xs
domatch[Ite](z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
domatch[Ite](z, z', z'', z1) -{ 0 }→ 1 + z1 + domatch(z', xs, 1 + z1 + (1 + 1 + 1)) :|: z = 2, z' >= 0, xs >= 0, z1 >= 0, x >= 0, z'' = 1 + x + xs
eqNatList(z, z') -{ 1 }→ eqNatList[Ite](2, 0, z' - 1, 0, z - 1) :|: z - 1 >= 0, z' - 1 >= 0
eqNatList(z, z') -{ 1 }→ eqNatList[Ite](1, 0, z' - 1, 1 + x13, xs) :|: x13 >= 0, xs >= 0, z' - 1 >= 0, z = 1 + (1 + x13) + xs
eqNatList(z, z') -{ 1 }→ eqNatList[Ite](1, 1 + y2, ys, 0, z - 1) :|: z - 1 >= 0, z' = 1 + (1 + y2) + ys, ys >= 0, y2 >= 0
eqNatList(z, z') -{ 1 }→ eqNatList[Ite](0, y, ys, x, xs) :|: z = 1 + x + xs, xs >= 0, ys >= 0, x >= 0, y >= 0, z' = 1 + y + ys
eqNatList(z, z') -{ 1 }→ eqNatList[Ite](!EQ(x12, y1), 1 + y1, ys, 1 + x12, xs) :|: y1 >= 0, xs >= 0, z = 1 + (1 + x12) + xs, ys >= 0, z' = 1 + (1 + y1) + ys, x12 >= 0
eqNatList(z, z') -{ 1 }→ 2 :|: z = 1, z' = 1
eqNatList(z, z') -{ 1 }→ 1 :|: z = 1 + x + xs, xs >= 0, x >= 0, z' = 1
eqNatList(z, z') -{ 1 }→ 1 :|: z = 1, ys >= 0, y >= 0, z' = 1 + y + ys
eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }→ eqNatList(z2, z'') :|: z = 2, z2 >= 0, z'' >= 0, z' >= 0, z1 >= 0
eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }→ 1 :|: z2 >= 0, z = 1, z'' >= 0, z' >= 0, z1 >= 0
eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }→ 0 :|: z >= 0, z2 >= 0, z' >= 0, z'' >= 0, z1 >= 0
notEmpty(z) -{ 1 }→ 2 :|: z = 1 + x + xs, xs >= 0, x >= 0
notEmpty(z) -{ 1 }→ 1 :|: z = 1
prefix(z, z') -{ 2 }→ and(2, and(!EQ(x'3, x8), prefix(xs'2, xs7))) :|: x8 >= 0, x'3 >= 0, z' = 1 + 0 + (1 + x8 + xs7), xs7 >= 0, z = 1 + 0 + (1 + x'3 + xs'2), xs'2 >= 0
prefix(z, z') -{ 2 }→ and(1, and(!EQ(x'1, x4), prefix(xs''', xs3))) :|: z' = 1 + (1 + y'') + (1 + x4 + xs3), x4 >= 0, x'1 >= 0, z = 1 + 0 + (1 + x'1 + xs'''), y'' >= 0, xs''' >= 0, xs3 >= 0
prefix(z, z') -{ 2 }→ and(1, and(!EQ(x'2, x6), prefix(xs'1, xs5))) :|: x1 >= 0, z' = 1 + 0 + (1 + x6 + xs5), x'2 >= 0, x6 >= 0, z = 1 + (1 + x1) + (1 + x'2 + xs'1), xs5 >= 0, xs'1 >= 0
prefix(z, z') -{ 2 }→ and(0, and(!EQ(x'4, x10), prefix(xs'3, xs9))) :|: z = 1 + x' + (1 + x'4 + xs'3), z' = 1 + x + (1 + x10 + xs9), x' >= 0, x >= 0, x'4 >= 0, x10 >= 0, xs9 >= 0, xs'3 >= 0
prefix(z, z') -{ 2 }→ and(!EQ(x'', y'), and(!EQ(x''', x2), prefix(xs'', xs1))) :|: z = 1 + (1 + x'') + (1 + x''' + xs''), z' = 1 + (1 + y') + (1 + x2 + xs1), xs'' >= 0, y' >= 0, xs1 >= 0, x''' >= 0, x'' >= 0, x2 >= 0
prefix(z, z') -{ 1 }→ and(!EQ(x'', y'), 0) :|: z = 1 + (1 + x'') + xs', xs >= 0, z' = 1 + (1 + y') + xs, xs' >= 0, y' >= 0, x'' >= 0
prefix(z, z') -{ 2 }→ and(!EQ(x'', z' - 3), 1) :|: xs2 >= 0, z = 1 + (1 + x'') + (1 + x3 + xs2), z' - 3 >= 0, x'' >= 0, x3 >= 0
prefix(z, z') -{ 2 }→ and(!EQ(z - 3, y'), 2) :|: xs >= 0, z' = 1 + (1 + y') + xs, y' >= 0, z - 3 >= 0
prefix(z, z') -{ 1 }→ 2 :|: z = 1, z' >= 0
prefix(z, z') -{ 2 }→ 2 :|: z' - 1 >= 0, z = 1 + 0 + 1, 2 = 2
prefix(z, z') -{ 1 }→ 1 :|: z = 1 + x + xs, xs >= 0, x >= 0, z' = 1
prefix(z, z') -{ 2 }→ 1 :|: x5 >= 0, z' - 3 >= 0, xs4 >= 0, z = 1 + 0 + (1 + x5 + xs4), 1 = 1
prefix(z, z') -{ 2 }→ 1 :|: xs >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, z = 1 + 0 + 1, 2 = 2, 1 = 1
prefix(z, z') -{ 2 }→ 1 :|: xs6 >= 0, x1 >= 0, z' = 1 + 0 + 1, z = 1 + (1 + x1) + (1 + x7 + xs6), x7 >= 0, 1 = 1
prefix(z, z') -{ 2 }→ 1 :|: z' - 1 >= 0, z - 3 >= 0, 2 = 2, 1 = 1
prefix(z, z') -{ 2 }→ 1 :|: z = 1 + 0 + (1 + x9 + xs8), z' = 1 + 0 + 1, xs8 >= 0, x9 >= 0, 2 = 2, 1 = 1
prefix(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
prefix(z, z') -{ 2 }→ 0 :|: x5 >= 0, z' - 3 >= 0, xs4 >= 0, z = 1 + 0 + (1 + x5 + xs4), v0 >= 0, v1 >= 0, 1 = v0, 1 = v1
prefix(z, z') -{ 2 }→ 0 :|: xs >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, z = 1 + 0 + 1, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1
prefix(z, z') -{ 1 }→ 0 :|: xs >= 0, z - 1 >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1
prefix(z, z') -{ 2 }→ 0 :|: xs6 >= 0, x1 >= 0, z' = 1 + 0 + 1, z = 1 + (1 + x1) + (1 + x7 + xs6), x7 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 1 = v1
prefix(z, z') -{ 2 }→ 0 :|: z' - 1 >= 0, z - 3 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1
prefix(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, x1 >= 0, z = 1 + (1 + x1) + xs', xs' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1
prefix(z, z') -{ 2 }→ 0 :|: z = 1 + 0 + (1 + x9 + xs8), z' = 1 + 0 + 1, xs8 >= 0, x9 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 1 = v1
prefix(z, z') -{ 2 }→ 0 :|: z' - 1 >= 0, z = 1 + 0 + 1, v0 >= 0, v1 >= 0, 2 = v0, 2 = v1
prefix(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 0 = v1
prefix(z, z') -{ 2 }→ 0 :|: z = 1 + x' + (1 + x11 + xs10), x' >= 0, z' - 2 >= 0, x11 >= 0, xs10 >= 0, v0 >= 0, v1 >= 0, 0 = v0, 1 = v1
prefix(z, z') -{ 2 }→ 0 :|: xs >= 0, z' = 1 + x + xs, z - 2 >= 0, x >= 0, v0 >= 0, v1 >= 0, 0 = v0, 2 = v1
prefix(z, z') -{ 1 }→ 0 :|: xs >= 0, z' = 1 + x + xs, x' >= 0, xs' >= 0, x >= 0, z = 1 + x' + xs', v0 >= 0, v1 >= 0, 0 = v0, 0 = v1
strmatch(z, z') -{ 1 }→ domatch(z, z', 1) :|: z >= 0, z' >= 0

Function symbols to be analyzed: {!EQ}, {and}, {eqNatList[Ite],eqNatList}, {prefix}, {domatch[Ite],domatch}, {strmatch}
Previous analysis results are:
notEmpty: runtime: O(1) [1], size: O(1) [2]

(23) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed SIZE bound using CoFloCo for: !EQ
after applying outer abstraction to obtain an ITS,
resulting in: O(1) with polynomial bound: 2

(24) Obligation:

Complexity RNTS consisting of the following rules:

!EQ(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
!EQ(z, z') -{ 0 }→ 1 :|: z' - 1 >= 0, z = 0
!EQ(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
!EQ(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
!EQ(z, z') -{ 0 }→ !EQ(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
domatch(z, z', z'') -{ 2 }→ domatch[Ite](and(!EQ(x'5, x), prefix(xs'4, xs)), 1 + x'5 + xs'4, 1 + x + xs, z'') :|: xs >= 0, z'' >= 0, z' = 1 + x + xs, x >= 0, z = 1 + x'5 + xs'4, xs'4 >= 0, x'5 >= 0
domatch(z, z', z'') -{ 2 }→ domatch[Ite](2, 1, 1 + x + xs, z'') :|: xs >= 0, z'' >= 0, z' = 1 + x + xs, z = 1, x >= 0
domatch(z, z', z'') -{ 1 }→ domatch[Ite](0, z, 1 + x + xs, z'') :|: z >= 0, xs >= 0, z'' >= 0, z' = 1 + x + xs, x >= 0
domatch(z, z', z'') -{ 1 }→ 1 :|: z = 1 + x + xs, xs >= 0, z'' >= 0, x >= 0, z' = 1
domatch(z, z', z'') -{ 1 }→ 1 + z'' + 1 :|: z'' >= 0, z = 1, z' = 1
domatch[Ite](z, z', z'', z1) -{ 0 }→ domatch(z', xs, 1 + z1 + (1 + 1 + 1)) :|: z' >= 0, xs >= 0, z1 >= 0, z = 1, x >= 0, z'' = 1 + x + xs
domatch[Ite](z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
domatch[Ite](z, z', z'', z1) -{ 0 }→ 1 + z1 + domatch(z', xs, 1 + z1 + (1 + 1 + 1)) :|: z = 2, z' >= 0, xs >= 0, z1 >= 0, x >= 0, z'' = 1 + x + xs
eqNatList(z, z') -{ 1 }→ eqNatList[Ite](2, 0, z' - 1, 0, z - 1) :|: z - 1 >= 0, z' - 1 >= 0
eqNatList(z, z') -{ 1 }→ eqNatList[Ite](1, 0, z' - 1, 1 + x13, xs) :|: x13 >= 0, xs >= 0, z' - 1 >= 0, z = 1 + (1 + x13) + xs
eqNatList(z, z') -{ 1 }→ eqNatList[Ite](1, 1 + y2, ys, 0, z - 1) :|: z - 1 >= 0, z' = 1 + (1 + y2) + ys, ys >= 0, y2 >= 0
eqNatList(z, z') -{ 1 }→ eqNatList[Ite](0, y, ys, x, xs) :|: z = 1 + x + xs, xs >= 0, ys >= 0, x >= 0, y >= 0, z' = 1 + y + ys
eqNatList(z, z') -{ 1 }→ eqNatList[Ite](!EQ(x12, y1), 1 + y1, ys, 1 + x12, xs) :|: y1 >= 0, xs >= 0, z = 1 + (1 + x12) + xs, ys >= 0, z' = 1 + (1 + y1) + ys, x12 >= 0
eqNatList(z, z') -{ 1 }→ 2 :|: z = 1, z' = 1
eqNatList(z, z') -{ 1 }→ 1 :|: z = 1 + x + xs, xs >= 0, x >= 0, z' = 1
eqNatList(z, z') -{ 1 }→ 1 :|: z = 1, ys >= 0, y >= 0, z' = 1 + y + ys
eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }→ eqNatList(z2, z'') :|: z = 2, z2 >= 0, z'' >= 0, z' >= 0, z1 >= 0
eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }→ 1 :|: z2 >= 0, z = 1, z'' >= 0, z' >= 0, z1 >= 0
eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }→ 0 :|: z >= 0, z2 >= 0, z' >= 0, z'' >= 0, z1 >= 0
notEmpty(z) -{ 1 }→ 2 :|: z = 1 + x + xs, xs >= 0, x >= 0
notEmpty(z) -{ 1 }→ 1 :|: z = 1
prefix(z, z') -{ 2 }→ and(2, and(!EQ(x'3, x8), prefix(xs'2, xs7))) :|: x8 >= 0, x'3 >= 0, z' = 1 + 0 + (1 + x8 + xs7), xs7 >= 0, z = 1 + 0 + (1 + x'3 + xs'2), xs'2 >= 0
prefix(z, z') -{ 2 }→ and(1, and(!EQ(x'1, x4), prefix(xs''', xs3))) :|: z' = 1 + (1 + y'') + (1 + x4 + xs3), x4 >= 0, x'1 >= 0, z = 1 + 0 + (1 + x'1 + xs'''), y'' >= 0, xs''' >= 0, xs3 >= 0
prefix(z, z') -{ 2 }→ and(1, and(!EQ(x'2, x6), prefix(xs'1, xs5))) :|: x1 >= 0, z' = 1 + 0 + (1 + x6 + xs5), x'2 >= 0, x6 >= 0, z = 1 + (1 + x1) + (1 + x'2 + xs'1), xs5 >= 0, xs'1 >= 0
prefix(z, z') -{ 2 }→ and(0, and(!EQ(x'4, x10), prefix(xs'3, xs9))) :|: z = 1 + x' + (1 + x'4 + xs'3), z' = 1 + x + (1 + x10 + xs9), x' >= 0, x >= 0, x'4 >= 0, x10 >= 0, xs9 >= 0, xs'3 >= 0
prefix(z, z') -{ 2 }→ and(!EQ(x'', y'), and(!EQ(x''', x2), prefix(xs'', xs1))) :|: z = 1 + (1 + x'') + (1 + x''' + xs''), z' = 1 + (1 + y') + (1 + x2 + xs1), xs'' >= 0, y' >= 0, xs1 >= 0, x''' >= 0, x'' >= 0, x2 >= 0
prefix(z, z') -{ 1 }→ and(!EQ(x'', y'), 0) :|: z = 1 + (1 + x'') + xs', xs >= 0, z' = 1 + (1 + y') + xs, xs' >= 0, y' >= 0, x'' >= 0
prefix(z, z') -{ 2 }→ and(!EQ(x'', z' - 3), 1) :|: xs2 >= 0, z = 1 + (1 + x'') + (1 + x3 + xs2), z' - 3 >= 0, x'' >= 0, x3 >= 0
prefix(z, z') -{ 2 }→ and(!EQ(z - 3, y'), 2) :|: xs >= 0, z' = 1 + (1 + y') + xs, y' >= 0, z - 3 >= 0
prefix(z, z') -{ 1 }→ 2 :|: z = 1, z' >= 0
prefix(z, z') -{ 2 }→ 2 :|: z' - 1 >= 0, z = 1 + 0 + 1, 2 = 2
prefix(z, z') -{ 1 }→ 1 :|: z = 1 + x + xs, xs >= 0, x >= 0, z' = 1
prefix(z, z') -{ 2 }→ 1 :|: x5 >= 0, z' - 3 >= 0, xs4 >= 0, z = 1 + 0 + (1 + x5 + xs4), 1 = 1
prefix(z, z') -{ 2 }→ 1 :|: xs >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, z = 1 + 0 + 1, 2 = 2, 1 = 1
prefix(z, z') -{ 2 }→ 1 :|: xs6 >= 0, x1 >= 0, z' = 1 + 0 + 1, z = 1 + (1 + x1) + (1 + x7 + xs6), x7 >= 0, 1 = 1
prefix(z, z') -{ 2 }→ 1 :|: z' - 1 >= 0, z - 3 >= 0, 2 = 2, 1 = 1
prefix(z, z') -{ 2 }→ 1 :|: z = 1 + 0 + (1 + x9 + xs8), z' = 1 + 0 + 1, xs8 >= 0, x9 >= 0, 2 = 2, 1 = 1
prefix(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
prefix(z, z') -{ 2 }→ 0 :|: x5 >= 0, z' - 3 >= 0, xs4 >= 0, z = 1 + 0 + (1 + x5 + xs4), v0 >= 0, v1 >= 0, 1 = v0, 1 = v1
prefix(z, z') -{ 2 }→ 0 :|: xs >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, z = 1 + 0 + 1, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1
prefix(z, z') -{ 1 }→ 0 :|: xs >= 0, z - 1 >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1
prefix(z, z') -{ 2 }→ 0 :|: xs6 >= 0, x1 >= 0, z' = 1 + 0 + 1, z = 1 + (1 + x1) + (1 + x7 + xs6), x7 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 1 = v1
prefix(z, z') -{ 2 }→ 0 :|: z' - 1 >= 0, z - 3 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1
prefix(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, x1 >= 0, z = 1 + (1 + x1) + xs', xs' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1
prefix(z, z') -{ 2 }→ 0 :|: z = 1 + 0 + (1 + x9 + xs8), z' = 1 + 0 + 1, xs8 >= 0, x9 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 1 = v1
prefix(z, z') -{ 2 }→ 0 :|: z' - 1 >= 0, z = 1 + 0 + 1, v0 >= 0, v1 >= 0, 2 = v0, 2 = v1
prefix(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 0 = v1
prefix(z, z') -{ 2 }→ 0 :|: z = 1 + x' + (1 + x11 + xs10), x' >= 0, z' - 2 >= 0, x11 >= 0, xs10 >= 0, v0 >= 0, v1 >= 0, 0 = v0, 1 = v1
prefix(z, z') -{ 2 }→ 0 :|: xs >= 0, z' = 1 + x + xs, z - 2 >= 0, x >= 0, v0 >= 0, v1 >= 0, 0 = v0, 2 = v1
prefix(z, z') -{ 1 }→ 0 :|: xs >= 0, z' = 1 + x + xs, x' >= 0, xs' >= 0, x >= 0, z = 1 + x' + xs', v0 >= 0, v1 >= 0, 0 = v0, 0 = v1
strmatch(z, z') -{ 1 }→ domatch(z, z', 1) :|: z >= 0, z' >= 0

Function symbols to be analyzed: {!EQ}, {and}, {eqNatList[Ite],eqNatList}, {prefix}, {domatch[Ite],domatch}, {strmatch}
Previous analysis results are:
notEmpty: runtime: O(1) [1], size: O(1) [2]
!EQ: runtime: ?, size: O(1) [2]

(25) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed RUNTIME bound using CoFloCo for: !EQ
after applying outer abstraction to obtain an ITS,
resulting in: O(1) with polynomial bound: 0

(26) Obligation:

Complexity RNTS consisting of the following rules:

!EQ(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
!EQ(z, z') -{ 0 }→ 1 :|: z' - 1 >= 0, z = 0
!EQ(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
!EQ(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
!EQ(z, z') -{ 0 }→ !EQ(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
domatch(z, z', z'') -{ 2 }→ domatch[Ite](and(!EQ(x'5, x), prefix(xs'4, xs)), 1 + x'5 + xs'4, 1 + x + xs, z'') :|: xs >= 0, z'' >= 0, z' = 1 + x + xs, x >= 0, z = 1 + x'5 + xs'4, xs'4 >= 0, x'5 >= 0
domatch(z, z', z'') -{ 2 }→ domatch[Ite](2, 1, 1 + x + xs, z'') :|: xs >= 0, z'' >= 0, z' = 1 + x + xs, z = 1, x >= 0
domatch(z, z', z'') -{ 1 }→ domatch[Ite](0, z, 1 + x + xs, z'') :|: z >= 0, xs >= 0, z'' >= 0, z' = 1 + x + xs, x >= 0
domatch(z, z', z'') -{ 1 }→ 1 :|: z = 1 + x + xs, xs >= 0, z'' >= 0, x >= 0, z' = 1
domatch(z, z', z'') -{ 1 }→ 1 + z'' + 1 :|: z'' >= 0, z = 1, z' = 1
domatch[Ite](z, z', z'', z1) -{ 0 }→ domatch(z', xs, 1 + z1 + (1 + 1 + 1)) :|: z' >= 0, xs >= 0, z1 >= 0, z = 1, x >= 0, z'' = 1 + x + xs
domatch[Ite](z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
domatch[Ite](z, z', z'', z1) -{ 0 }→ 1 + z1 + domatch(z', xs, 1 + z1 + (1 + 1 + 1)) :|: z = 2, z' >= 0, xs >= 0, z1 >= 0, x >= 0, z'' = 1 + x + xs
eqNatList(z, z') -{ 1 }→ eqNatList[Ite](2, 0, z' - 1, 0, z - 1) :|: z - 1 >= 0, z' - 1 >= 0
eqNatList(z, z') -{ 1 }→ eqNatList[Ite](1, 0, z' - 1, 1 + x13, xs) :|: x13 >= 0, xs >= 0, z' - 1 >= 0, z = 1 + (1 + x13) + xs
eqNatList(z, z') -{ 1 }→ eqNatList[Ite](1, 1 + y2, ys, 0, z - 1) :|: z - 1 >= 0, z' = 1 + (1 + y2) + ys, ys >= 0, y2 >= 0
eqNatList(z, z') -{ 1 }→ eqNatList[Ite](0, y, ys, x, xs) :|: z = 1 + x + xs, xs >= 0, ys >= 0, x >= 0, y >= 0, z' = 1 + y + ys
eqNatList(z, z') -{ 1 }→ eqNatList[Ite](!EQ(x12, y1), 1 + y1, ys, 1 + x12, xs) :|: y1 >= 0, xs >= 0, z = 1 + (1 + x12) + xs, ys >= 0, z' = 1 + (1 + y1) + ys, x12 >= 0
eqNatList(z, z') -{ 1 }→ 2 :|: z = 1, z' = 1
eqNatList(z, z') -{ 1 }→ 1 :|: z = 1 + x + xs, xs >= 0, x >= 0, z' = 1
eqNatList(z, z') -{ 1 }→ 1 :|: z = 1, ys >= 0, y >= 0, z' = 1 + y + ys
eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }→ eqNatList(z2, z'') :|: z = 2, z2 >= 0, z'' >= 0, z' >= 0, z1 >= 0
eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }→ 1 :|: z2 >= 0, z = 1, z'' >= 0, z' >= 0, z1 >= 0
eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }→ 0 :|: z >= 0, z2 >= 0, z' >= 0, z'' >= 0, z1 >= 0
notEmpty(z) -{ 1 }→ 2 :|: z = 1 + x + xs, xs >= 0, x >= 0
notEmpty(z) -{ 1 }→ 1 :|: z = 1
prefix(z, z') -{ 2 }→ and(2, and(!EQ(x'3, x8), prefix(xs'2, xs7))) :|: x8 >= 0, x'3 >= 0, z' = 1 + 0 + (1 + x8 + xs7), xs7 >= 0, z = 1 + 0 + (1 + x'3 + xs'2), xs'2 >= 0
prefix(z, z') -{ 2 }→ and(1, and(!EQ(x'1, x4), prefix(xs''', xs3))) :|: z' = 1 + (1 + y'') + (1 + x4 + xs3), x4 >= 0, x'1 >= 0, z = 1 + 0 + (1 + x'1 + xs'''), y'' >= 0, xs''' >= 0, xs3 >= 0
prefix(z, z') -{ 2 }→ and(1, and(!EQ(x'2, x6), prefix(xs'1, xs5))) :|: x1 >= 0, z' = 1 + 0 + (1 + x6 + xs5), x'2 >= 0, x6 >= 0, z = 1 + (1 + x1) + (1 + x'2 + xs'1), xs5 >= 0, xs'1 >= 0
prefix(z, z') -{ 2 }→ and(0, and(!EQ(x'4, x10), prefix(xs'3, xs9))) :|: z = 1 + x' + (1 + x'4 + xs'3), z' = 1 + x + (1 + x10 + xs9), x' >= 0, x >= 0, x'4 >= 0, x10 >= 0, xs9 >= 0, xs'3 >= 0
prefix(z, z') -{ 2 }→ and(!EQ(x'', y'), and(!EQ(x''', x2), prefix(xs'', xs1))) :|: z = 1 + (1 + x'') + (1 + x''' + xs''), z' = 1 + (1 + y') + (1 + x2 + xs1), xs'' >= 0, y' >= 0, xs1 >= 0, x''' >= 0, x'' >= 0, x2 >= 0
prefix(z, z') -{ 1 }→ and(!EQ(x'', y'), 0) :|: z = 1 + (1 + x'') + xs', xs >= 0, z' = 1 + (1 + y') + xs, xs' >= 0, y' >= 0, x'' >= 0
prefix(z, z') -{ 2 }→ and(!EQ(x'', z' - 3), 1) :|: xs2 >= 0, z = 1 + (1 + x'') + (1 + x3 + xs2), z' - 3 >= 0, x'' >= 0, x3 >= 0
prefix(z, z') -{ 2 }→ and(!EQ(z - 3, y'), 2) :|: xs >= 0, z' = 1 + (1 + y') + xs, y' >= 0, z - 3 >= 0
prefix(z, z') -{ 1 }→ 2 :|: z = 1, z' >= 0
prefix(z, z') -{ 2 }→ 2 :|: z' - 1 >= 0, z = 1 + 0 + 1, 2 = 2
prefix(z, z') -{ 1 }→ 1 :|: z = 1 + x + xs, xs >= 0, x >= 0, z' = 1
prefix(z, z') -{ 2 }→ 1 :|: x5 >= 0, z' - 3 >= 0, xs4 >= 0, z = 1 + 0 + (1 + x5 + xs4), 1 = 1
prefix(z, z') -{ 2 }→ 1 :|: xs >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, z = 1 + 0 + 1, 2 = 2, 1 = 1
prefix(z, z') -{ 2 }→ 1 :|: xs6 >= 0, x1 >= 0, z' = 1 + 0 + 1, z = 1 + (1 + x1) + (1 + x7 + xs6), x7 >= 0, 1 = 1
prefix(z, z') -{ 2 }→ 1 :|: z' - 1 >= 0, z - 3 >= 0, 2 = 2, 1 = 1
prefix(z, z') -{ 2 }→ 1 :|: z = 1 + 0 + (1 + x9 + xs8), z' = 1 + 0 + 1, xs8 >= 0, x9 >= 0, 2 = 2, 1 = 1
prefix(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
prefix(z, z') -{ 2 }→ 0 :|: x5 >= 0, z' - 3 >= 0, xs4 >= 0, z = 1 + 0 + (1 + x5 + xs4), v0 >= 0, v1 >= 0, 1 = v0, 1 = v1
prefix(z, z') -{ 2 }→ 0 :|: xs >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, z = 1 + 0 + 1, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1
prefix(z, z') -{ 1 }→ 0 :|: xs >= 0, z - 1 >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1
prefix(z, z') -{ 2 }→ 0 :|: xs6 >= 0, x1 >= 0, z' = 1 + 0 + 1, z = 1 + (1 + x1) + (1 + x7 + xs6), x7 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 1 = v1
prefix(z, z') -{ 2 }→ 0 :|: z' - 1 >= 0, z - 3 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1
prefix(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, x1 >= 0, z = 1 + (1 + x1) + xs', xs' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1
prefix(z, z') -{ 2 }→ 0 :|: z = 1 + 0 + (1 + x9 + xs8), z' = 1 + 0 + 1, xs8 >= 0, x9 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 1 = v1
prefix(z, z') -{ 2 }→ 0 :|: z' - 1 >= 0, z = 1 + 0 + 1, v0 >= 0, v1 >= 0, 2 = v0, 2 = v1
prefix(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 0 = v1
prefix(z, z') -{ 2 }→ 0 :|: z = 1 + x' + (1 + x11 + xs10), x' >= 0, z' - 2 >= 0, x11 >= 0, xs10 >= 0, v0 >= 0, v1 >= 0, 0 = v0, 1 = v1
prefix(z, z') -{ 2 }→ 0 :|: xs >= 0, z' = 1 + x + xs, z - 2 >= 0, x >= 0, v0 >= 0, v1 >= 0, 0 = v0, 2 = v1
prefix(z, z') -{ 1 }→ 0 :|: xs >= 0, z' = 1 + x + xs, x' >= 0, xs' >= 0, x >= 0, z = 1 + x' + xs', v0 >= 0, v1 >= 0, 0 = v0, 0 = v1
strmatch(z, z') -{ 1 }→ domatch(z, z', 1) :|: z >= 0, z' >= 0

Function symbols to be analyzed: {and}, {eqNatList[Ite],eqNatList}, {prefix}, {domatch[Ite],domatch}, {strmatch}
Previous analysis results are:
notEmpty: runtime: O(1) [1], size: O(1) [2]
!EQ: runtime: O(1) [0], size: O(1) [2]

(27) ResultPropagationProof (UPPER BOUND(ID) transformation)

Applied inner abstraction using the recently inferred runtime/size bounds where possible.

(28) Obligation:

Complexity RNTS consisting of the following rules:

!EQ(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 2, z - 1 >= 0, z' - 1 >= 0
!EQ(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
!EQ(z, z') -{ 0 }→ 1 :|: z' - 1 >= 0, z = 0
!EQ(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
!EQ(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
domatch(z, z', z'') -{ 2 }→ domatch[Ite](and(s9, prefix(xs'4, xs)), 1 + x'5 + xs'4, 1 + x + xs, z'') :|: s9 >= 0, s9 <= 2, xs >= 0, z'' >= 0, z' = 1 + x + xs, x >= 0, z = 1 + x'5 + xs'4, xs'4 >= 0, x'5 >= 0
domatch(z, z', z'') -{ 2 }→ domatch[Ite](2, 1, 1 + x + xs, z'') :|: xs >= 0, z'' >= 0, z' = 1 + x + xs, z = 1, x >= 0
domatch(z, z', z'') -{ 1 }→ domatch[Ite](0, z, 1 + x + xs, z'') :|: z >= 0, xs >= 0, z'' >= 0, z' = 1 + x + xs, x >= 0
domatch(z, z', z'') -{ 1 }→ 1 :|: z = 1 + x + xs, xs >= 0, z'' >= 0, x >= 0, z' = 1
domatch(z, z', z'') -{ 1 }→ 1 + z'' + 1 :|: z'' >= 0, z = 1, z' = 1
domatch[Ite](z, z', z'', z1) -{ 0 }→ domatch(z', xs, 1 + z1 + (1 + 1 + 1)) :|: z' >= 0, xs >= 0, z1 >= 0, z = 1, x >= 0, z'' = 1 + x + xs
domatch[Ite](z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
domatch[Ite](z, z', z'', z1) -{ 0 }→ 1 + z1 + domatch(z', xs, 1 + z1 + (1 + 1 + 1)) :|: z = 2, z' >= 0, xs >= 0, z1 >= 0, x >= 0, z'' = 1 + x + xs
eqNatList(z, z') -{ 1 }→ eqNatList[Ite](s, 1 + y1, ys, 1 + x12, xs) :|: s >= 0, s <= 2, y1 >= 0, xs >= 0, z = 1 + (1 + x12) + xs, ys >= 0, z' = 1 + (1 + y1) + ys, x12 >= 0
eqNatList(z, z') -{ 1 }→ eqNatList[Ite](2, 0, z' - 1, 0, z - 1) :|: z - 1 >= 0, z' - 1 >= 0
eqNatList(z, z') -{ 1 }→ eqNatList[Ite](1, 0, z' - 1, 1 + x13, xs) :|: x13 >= 0, xs >= 0, z' - 1 >= 0, z = 1 + (1 + x13) + xs
eqNatList(z, z') -{ 1 }→ eqNatList[Ite](1, 1 + y2, ys, 0, z - 1) :|: z - 1 >= 0, z' = 1 + (1 + y2) + ys, ys >= 0, y2 >= 0
eqNatList(z, z') -{ 1 }→ eqNatList[Ite](0, y, ys, x, xs) :|: z = 1 + x + xs, xs >= 0, ys >= 0, x >= 0, y >= 0, z' = 1 + y + ys
eqNatList(z, z') -{ 1 }→ 2 :|: z = 1, z' = 1
eqNatList(z, z') -{ 1 }→ 1 :|: z = 1 + x + xs, xs >= 0, x >= 0, z' = 1
eqNatList(z, z') -{ 1 }→ 1 :|: z = 1, ys >= 0, y >= 0, z' = 1 + y + ys
eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }→ eqNatList(z2, z'') :|: z = 2, z2 >= 0, z'' >= 0, z' >= 0, z1 >= 0
eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }→ 1 :|: z2 >= 0, z = 1, z'' >= 0, z' >= 0, z1 >= 0
eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }→ 0 :|: z >= 0, z2 >= 0, z' >= 0, z'' >= 0, z1 >= 0
notEmpty(z) -{ 1 }→ 2 :|: z = 1 + x + xs, xs >= 0, x >= 0
notEmpty(z) -{ 1 }→ 1 :|: z = 1
prefix(z, z') -{ 2 }→ and(s'', and(s1, prefix(xs'', xs1))) :|: s'' >= 0, s'' <= 2, s1 >= 0, s1 <= 2, z = 1 + (1 + x'') + (1 + x''' + xs''), z' = 1 + (1 + y') + (1 + x2 + xs1), xs'' >= 0, y' >= 0, xs1 >= 0, x''' >= 0, x'' >= 0, x2 >= 0
prefix(z, z') -{ 2 }→ and(s2, 1) :|: s2 >= 0, s2 <= 2, xs2 >= 0, z = 1 + (1 + x'') + (1 + x3 + xs2), z' - 3 >= 0, x'' >= 0, x3 >= 0
prefix(z, z') -{ 2 }→ and(s3, 2) :|: s3 >= 0, s3 <= 2, xs >= 0, z' = 1 + (1 + y') + xs, y' >= 0, z - 3 >= 0
prefix(z, z') -{ 1 }→ and(s4, 0) :|: s4 >= 0, s4 <= 2, z = 1 + (1 + x'') + xs', xs >= 0, z' = 1 + (1 + y') + xs, xs' >= 0, y' >= 0, x'' >= 0
prefix(z, z') -{ 2 }→ and(2, and(s7, prefix(xs'2, xs7))) :|: s7 >= 0, s7 <= 2, x8 >= 0, x'3 >= 0, z' = 1 + 0 + (1 + x8 + xs7), xs7 >= 0, z = 1 + 0 + (1 + x'3 + xs'2), xs'2 >= 0
prefix(z, z') -{ 2 }→ and(1, and(s5, prefix(xs''', xs3))) :|: s5 >= 0, s5 <= 2, z' = 1 + (1 + y'') + (1 + x4 + xs3), x4 >= 0, x'1 >= 0, z = 1 + 0 + (1 + x'1 + xs'''), y'' >= 0, xs''' >= 0, xs3 >= 0
prefix(z, z') -{ 2 }→ and(1, and(s6, prefix(xs'1, xs5))) :|: s6 >= 0, s6 <= 2, x1 >= 0, z' = 1 + 0 + (1 + x6 + xs5), x'2 >= 0, x6 >= 0, z = 1 + (1 + x1) + (1 + x'2 + xs'1), xs5 >= 0, xs'1 >= 0
prefix(z, z') -{ 2 }→ and(0, and(s8, prefix(xs'3, xs9))) :|: s8 >= 0, s8 <= 2, z = 1 + x' + (1 + x'4 + xs'3), z' = 1 + x + (1 + x10 + xs9), x' >= 0, x >= 0, x'4 >= 0, x10 >= 0, xs9 >= 0, xs'3 >= 0
prefix(z, z') -{ 1 }→ 2 :|: z = 1, z' >= 0
prefix(z, z') -{ 2 }→ 2 :|: z' - 1 >= 0, z = 1 + 0 + 1, 2 = 2
prefix(z, z') -{ 1 }→ 1 :|: z = 1 + x + xs, xs >= 0, x >= 0, z' = 1
prefix(z, z') -{ 2 }→ 1 :|: x5 >= 0, z' - 3 >= 0, xs4 >= 0, z = 1 + 0 + (1 + x5 + xs4), 1 = 1
prefix(z, z') -{ 2 }→ 1 :|: xs >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, z = 1 + 0 + 1, 2 = 2, 1 = 1
prefix(z, z') -{ 2 }→ 1 :|: xs6 >= 0, x1 >= 0, z' = 1 + 0 + 1, z = 1 + (1 + x1) + (1 + x7 + xs6), x7 >= 0, 1 = 1
prefix(z, z') -{ 2 }→ 1 :|: z' - 1 >= 0, z - 3 >= 0, 2 = 2, 1 = 1
prefix(z, z') -{ 2 }→ 1 :|: z = 1 + 0 + (1 + x9 + xs8), z' = 1 + 0 + 1, xs8 >= 0, x9 >= 0, 2 = 2, 1 = 1
prefix(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
prefix(z, z') -{ 2 }→ 0 :|: x5 >= 0, z' - 3 >= 0, xs4 >= 0, z = 1 + 0 + (1 + x5 + xs4), v0 >= 0, v1 >= 0, 1 = v0, 1 = v1
prefix(z, z') -{ 2 }→ 0 :|: xs >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, z = 1 + 0 + 1, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1
prefix(z, z') -{ 1 }→ 0 :|: xs >= 0, z - 1 >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1
prefix(z, z') -{ 2 }→ 0 :|: xs6 >= 0, x1 >= 0, z' = 1 + 0 + 1, z = 1 + (1 + x1) + (1 + x7 + xs6), x7 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 1 = v1
prefix(z, z') -{ 2 }→ 0 :|: z' - 1 >= 0, z - 3 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1
prefix(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, x1 >= 0, z = 1 + (1 + x1) + xs', xs' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1
prefix(z, z') -{ 2 }→ 0 :|: z = 1 + 0 + (1 + x9 + xs8), z' = 1 + 0 + 1, xs8 >= 0, x9 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 1 = v1
prefix(z, z') -{ 2 }→ 0 :|: z' - 1 >= 0, z = 1 + 0 + 1, v0 >= 0, v1 >= 0, 2 = v0, 2 = v1
prefix(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 0 = v1
prefix(z, z') -{ 2 }→ 0 :|: z = 1 + x' + (1 + x11 + xs10), x' >= 0, z' - 2 >= 0, x11 >= 0, xs10 >= 0, v0 >= 0, v1 >= 0, 0 = v0, 1 = v1
prefix(z, z') -{ 2 }→ 0 :|: xs >= 0, z' = 1 + x + xs, z - 2 >= 0, x >= 0, v0 >= 0, v1 >= 0, 0 = v0, 2 = v1
prefix(z, z') -{ 1 }→ 0 :|: xs >= 0, z' = 1 + x + xs, x' >= 0, xs' >= 0, x >= 0, z = 1 + x' + xs', v0 >= 0, v1 >= 0, 0 = v0, 0 = v1
strmatch(z, z') -{ 1 }→ domatch(z, z', 1) :|: z >= 0, z' >= 0

Function symbols to be analyzed: {and}, {eqNatList[Ite],eqNatList}, {prefix}, {domatch[Ite],domatch}, {strmatch}
Previous analysis results are:
notEmpty: runtime: O(1) [1], size: O(1) [2]
!EQ: runtime: O(1) [0], size: O(1) [2]

(29) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed SIZE bound using CoFloCo for: and
after applying outer abstraction to obtain an ITS,
resulting in: O(1) with polynomial bound: 2

(30) Obligation:

Complexity RNTS consisting of the following rules:

!EQ(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 2, z - 1 >= 0, z' - 1 >= 0
!EQ(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
!EQ(z, z') -{ 0 }→ 1 :|: z' - 1 >= 0, z = 0
!EQ(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
!EQ(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
domatch(z, z', z'') -{ 2 }→ domatch[Ite](and(s9, prefix(xs'4, xs)), 1 + x'5 + xs'4, 1 + x + xs, z'') :|: s9 >= 0, s9 <= 2, xs >= 0, z'' >= 0, z' = 1 + x + xs, x >= 0, z = 1 + x'5 + xs'4, xs'4 >= 0, x'5 >= 0
domatch(z, z', z'') -{ 2 }→ domatch[Ite](2, 1, 1 + x + xs, z'') :|: xs >= 0, z'' >= 0, z' = 1 + x + xs, z = 1, x >= 0
domatch(z, z', z'') -{ 1 }→ domatch[Ite](0, z, 1 + x + xs, z'') :|: z >= 0, xs >= 0, z'' >= 0, z' = 1 + x + xs, x >= 0
domatch(z, z', z'') -{ 1 }→ 1 :|: z = 1 + x + xs, xs >= 0, z'' >= 0, x >= 0, z' = 1
domatch(z, z', z'') -{ 1 }→ 1 + z'' + 1 :|: z'' >= 0, z = 1, z' = 1
domatch[Ite](z, z', z'', z1) -{ 0 }→ domatch(z', xs, 1 + z1 + (1 + 1 + 1)) :|: z' >= 0, xs >= 0, z1 >= 0, z = 1, x >= 0, z'' = 1 + x + xs
domatch[Ite](z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
domatch[Ite](z, z', z'', z1) -{ 0 }→ 1 + z1 + domatch(z', xs, 1 + z1 + (1 + 1 + 1)) :|: z = 2, z' >= 0, xs >= 0, z1 >= 0, x >= 0, z'' = 1 + x + xs
eqNatList(z, z') -{ 1 }→ eqNatList[Ite](s, 1 + y1, ys, 1 + x12, xs) :|: s >= 0, s <= 2, y1 >= 0, xs >= 0, z = 1 + (1 + x12) + xs, ys >= 0, z' = 1 + (1 + y1) + ys, x12 >= 0
eqNatList(z, z') -{ 1 }→ eqNatList[Ite](2, 0, z' - 1, 0, z - 1) :|: z - 1 >= 0, z' - 1 >= 0
eqNatList(z, z') -{ 1 }→ eqNatList[Ite](1, 0, z' - 1, 1 + x13, xs) :|: x13 >= 0, xs >= 0, z' - 1 >= 0, z = 1 + (1 + x13) + xs
eqNatList(z, z') -{ 1 }→ eqNatList[Ite](1, 1 + y2, ys, 0, z - 1) :|: z - 1 >= 0, z' = 1 + (1 + y2) + ys, ys >= 0, y2 >= 0
eqNatList(z, z') -{ 1 }→ eqNatList[Ite](0, y, ys, x, xs) :|: z = 1 + x + xs, xs >= 0, ys >= 0, x >= 0, y >= 0, z' = 1 + y + ys
eqNatList(z, z') -{ 1 }→ 2 :|: z = 1, z' = 1
eqNatList(z, z') -{ 1 }→ 1 :|: z = 1 + x + xs, xs >= 0, x >= 0, z' = 1
eqNatList(z, z') -{ 1 }→ 1 :|: z = 1, ys >= 0, y >= 0, z' = 1 + y + ys
eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }→ eqNatList(z2, z'') :|: z = 2, z2 >= 0, z'' >= 0, z' >= 0, z1 >= 0
eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }→ 1 :|: z2 >= 0, z = 1, z'' >= 0, z' >= 0, z1 >= 0
eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }→ 0 :|: z >= 0, z2 >= 0, z' >= 0, z'' >= 0, z1 >= 0
notEmpty(z) -{ 1 }→ 2 :|: z = 1 + x + xs, xs >= 0, x >= 0
notEmpty(z) -{ 1 }→ 1 :|: z = 1
prefix(z, z') -{ 2 }→ and(s'', and(s1, prefix(xs'', xs1))) :|: s'' >= 0, s'' <= 2, s1 >= 0, s1 <= 2, z = 1 + (1 + x'') + (1 + x''' + xs''), z' = 1 + (1 + y') + (1 + x2 + xs1), xs'' >= 0, y' >= 0, xs1 >= 0, x''' >= 0, x'' >= 0, x2 >= 0
prefix(z, z') -{ 2 }→ and(s2, 1) :|: s2 >= 0, s2 <= 2, xs2 >= 0, z = 1 + (1 + x'') + (1 + x3 + xs2), z' - 3 >= 0, x'' >= 0, x3 >= 0
prefix(z, z') -{ 2 }→ and(s3, 2) :|: s3 >= 0, s3 <= 2, xs >= 0, z' = 1 + (1 + y') + xs, y' >= 0, z - 3 >= 0
prefix(z, z') -{ 1 }→ and(s4, 0) :|: s4 >= 0, s4 <= 2, z = 1 + (1 + x'') + xs', xs >= 0, z' = 1 + (1 + y') + xs, xs' >= 0, y' >= 0, x'' >= 0
prefix(z, z') -{ 2 }→ and(2, and(s7, prefix(xs'2, xs7))) :|: s7 >= 0, s7 <= 2, x8 >= 0, x'3 >= 0, z' = 1 + 0 + (1 + x8 + xs7), xs7 >= 0, z = 1 + 0 + (1 + x'3 + xs'2), xs'2 >= 0
prefix(z, z') -{ 2 }→ and(1, and(s5, prefix(xs''', xs3))) :|: s5 >= 0, s5 <= 2, z' = 1 + (1 + y'') + (1 + x4 + xs3), x4 >= 0, x'1 >= 0, z = 1 + 0 + (1 + x'1 + xs'''), y'' >= 0, xs''' >= 0, xs3 >= 0
prefix(z, z') -{ 2 }→ and(1, and(s6, prefix(xs'1, xs5))) :|: s6 >= 0, s6 <= 2, x1 >= 0, z' = 1 + 0 + (1 + x6 + xs5), x'2 >= 0, x6 >= 0, z = 1 + (1 + x1) + (1 + x'2 + xs'1), xs5 >= 0, xs'1 >= 0
prefix(z, z') -{ 2 }→ and(0, and(s8, prefix(xs'3, xs9))) :|: s8 >= 0, s8 <= 2, z = 1 + x' + (1 + x'4 + xs'3), z' = 1 + x + (1 + x10 + xs9), x' >= 0, x >= 0, x'4 >= 0, x10 >= 0, xs9 >= 0, xs'3 >= 0
prefix(z, z') -{ 1 }→ 2 :|: z = 1, z' >= 0
prefix(z, z') -{ 2 }→ 2 :|: z' - 1 >= 0, z = 1 + 0 + 1, 2 = 2
prefix(z, z') -{ 1 }→ 1 :|: z = 1 + x + xs, xs >= 0, x >= 0, z' = 1
prefix(z, z') -{ 2 }→ 1 :|: x5 >= 0, z' - 3 >= 0, xs4 >= 0, z = 1 + 0 + (1 + x5 + xs4), 1 = 1
prefix(z, z') -{ 2 }→ 1 :|: xs >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, z = 1 + 0 + 1, 2 = 2, 1 = 1
prefix(z, z') -{ 2 }→ 1 :|: xs6 >= 0, x1 >= 0, z' = 1 + 0 + 1, z = 1 + (1 + x1) + (1 + x7 + xs6), x7 >= 0, 1 = 1
prefix(z, z') -{ 2 }→ 1 :|: z' - 1 >= 0, z - 3 >= 0, 2 = 2, 1 = 1
prefix(z, z') -{ 2 }→ 1 :|: z = 1 + 0 + (1 + x9 + xs8), z' = 1 + 0 + 1, xs8 >= 0, x9 >= 0, 2 = 2, 1 = 1
prefix(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
prefix(z, z') -{ 2 }→ 0 :|: x5 >= 0, z' - 3 >= 0, xs4 >= 0, z = 1 + 0 + (1 + x5 + xs4), v0 >= 0, v1 >= 0, 1 = v0, 1 = v1
prefix(z, z') -{ 2 }→ 0 :|: xs >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, z = 1 + 0 + 1, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1
prefix(z, z') -{ 1 }→ 0 :|: xs >= 0, z - 1 >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1
prefix(z, z') -{ 2 }→ 0 :|: xs6 >= 0, x1 >= 0, z' = 1 + 0 + 1, z = 1 + (1 + x1) + (1 + x7 + xs6), x7 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 1 = v1
prefix(z, z') -{ 2 }→ 0 :|: z' - 1 >= 0, z - 3 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1
prefix(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, x1 >= 0, z = 1 + (1 + x1) + xs', xs' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1
prefix(z, z') -{ 2 }→ 0 :|: z = 1 + 0 + (1 + x9 + xs8), z' = 1 + 0 + 1, xs8 >= 0, x9 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 1 = v1
prefix(z, z') -{ 2 }→ 0 :|: z' - 1 >= 0, z = 1 + 0 + 1, v0 >= 0, v1 >= 0, 2 = v0, 2 = v1
prefix(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 0 = v1
prefix(z, z') -{ 2 }→ 0 :|: z = 1 + x' + (1 + x11 + xs10), x' >= 0, z' - 2 >= 0, x11 >= 0, xs10 >= 0, v0 >= 0, v1 >= 0, 0 = v0, 1 = v1
prefix(z, z') -{ 2 }→ 0 :|: xs >= 0, z' = 1 + x + xs, z - 2 >= 0, x >= 0, v0 >= 0, v1 >= 0, 0 = v0, 2 = v1
prefix(z, z') -{ 1 }→ 0 :|: xs >= 0, z' = 1 + x + xs, x' >= 0, xs' >= 0, x >= 0, z = 1 + x' + xs', v0 >= 0, v1 >= 0, 0 = v0, 0 = v1
strmatch(z, z') -{ 1 }→ domatch(z, z', 1) :|: z >= 0, z' >= 0

Function symbols to be analyzed: {and}, {eqNatList[Ite],eqNatList}, {prefix}, {domatch[Ite],domatch}, {strmatch}
Previous analysis results are:
notEmpty: runtime: O(1) [1], size: O(1) [2]
!EQ: runtime: O(1) [0], size: O(1) [2]
and: runtime: ?, size: O(1) [2]

(31) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed RUNTIME bound using CoFloCo for: and
after applying outer abstraction to obtain an ITS,
resulting in: O(1) with polynomial bound: 0

(32) Obligation:

Complexity RNTS consisting of the following rules:

!EQ(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 2, z - 1 >= 0, z' - 1 >= 0
!EQ(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
!EQ(z, z') -{ 0 }→ 1 :|: z' - 1 >= 0, z = 0
!EQ(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
!EQ(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
domatch(z, z', z'') -{ 2 }→ domatch[Ite](and(s9, prefix(xs'4, xs)), 1 + x'5 + xs'4, 1 + x + xs, z'') :|: s9 >= 0, s9 <= 2, xs >= 0, z'' >= 0, z' = 1 + x + xs, x >= 0, z = 1 + x'5 + xs'4, xs'4 >= 0, x'5 >= 0
domatch(z, z', z'') -{ 2 }→ domatch[Ite](2, 1, 1 + x + xs, z'') :|: xs >= 0, z'' >= 0, z' = 1 + x + xs, z = 1, x >= 0
domatch(z, z', z'') -{ 1 }→ domatch[Ite](0, z, 1 + x + xs, z'') :|: z >= 0, xs >= 0, z'' >= 0, z' = 1 + x + xs, x >= 0
domatch(z, z', z'') -{ 1 }→ 1 :|: z = 1 + x + xs, xs >= 0, z'' >= 0, x >= 0, z' = 1
domatch(z, z', z'') -{ 1 }→ 1 + z'' + 1 :|: z'' >= 0, z = 1, z' = 1
domatch[Ite](z, z', z'', z1) -{ 0 }→ domatch(z', xs, 1 + z1 + (1 + 1 + 1)) :|: z' >= 0, xs >= 0, z1 >= 0, z = 1, x >= 0, z'' = 1 + x + xs
domatch[Ite](z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
domatch[Ite](z, z', z'', z1) -{ 0 }→ 1 + z1 + domatch(z', xs, 1 + z1 + (1 + 1 + 1)) :|: z = 2, z' >= 0, xs >= 0, z1 >= 0, x >= 0, z'' = 1 + x + xs
eqNatList(z, z') -{ 1 }→ eqNatList[Ite](s, 1 + y1, ys, 1 + x12, xs) :|: s >= 0, s <= 2, y1 >= 0, xs >= 0, z = 1 + (1 + x12) + xs, ys >= 0, z' = 1 + (1 + y1) + ys, x12 >= 0
eqNatList(z, z') -{ 1 }→ eqNatList[Ite](2, 0, z' - 1, 0, z - 1) :|: z - 1 >= 0, z' - 1 >= 0
eqNatList(z, z') -{ 1 }→ eqNatList[Ite](1, 0, z' - 1, 1 + x13, xs) :|: x13 >= 0, xs >= 0, z' - 1 >= 0, z = 1 + (1 + x13) + xs
eqNatList(z, z') -{ 1 }→ eqNatList[Ite](1, 1 + y2, ys, 0, z - 1) :|: z - 1 >= 0, z' = 1 + (1 + y2) + ys, ys >= 0, y2 >= 0
eqNatList(z, z') -{ 1 }→ eqNatList[Ite](0, y, ys, x, xs) :|: z = 1 + x + xs, xs >= 0, ys >= 0, x >= 0, y >= 0, z' = 1 + y + ys
eqNatList(z, z') -{ 1 }→ 2 :|: z = 1, z' = 1
eqNatList(z, z') -{ 1 }→ 1 :|: z = 1 + x + xs, xs >= 0, x >= 0, z' = 1
eqNatList(z, z') -{ 1 }→ 1 :|: z = 1, ys >= 0, y >= 0, z' = 1 + y + ys
eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }→ eqNatList(z2, z'') :|: z = 2, z2 >= 0, z'' >= 0, z' >= 0, z1 >= 0
eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }→ 1 :|: z2 >= 0, z = 1, z'' >= 0, z' >= 0, z1 >= 0
eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }→ 0 :|: z >= 0, z2 >= 0, z' >= 0, z'' >= 0, z1 >= 0
notEmpty(z) -{ 1 }→ 2 :|: z = 1 + x + xs, xs >= 0, x >= 0
notEmpty(z) -{ 1 }→ 1 :|: z = 1
prefix(z, z') -{ 2 }→ and(s'', and(s1, prefix(xs'', xs1))) :|: s'' >= 0, s'' <= 2, s1 >= 0, s1 <= 2, z = 1 + (1 + x'') + (1 + x''' + xs''), z' = 1 + (1 + y') + (1 + x2 + xs1), xs'' >= 0, y' >= 0, xs1 >= 0, x''' >= 0, x'' >= 0, x2 >= 0
prefix(z, z') -{ 2 }→ and(s2, 1) :|: s2 >= 0, s2 <= 2, xs2 >= 0, z = 1 + (1 + x'') + (1 + x3 + xs2), z' - 3 >= 0, x'' >= 0, x3 >= 0
prefix(z, z') -{ 2 }→ and(s3, 2) :|: s3 >= 0, s3 <= 2, xs >= 0, z' = 1 + (1 + y') + xs, y' >= 0, z - 3 >= 0
prefix(z, z') -{ 1 }→ and(s4, 0) :|: s4 >= 0, s4 <= 2, z = 1 + (1 + x'') + xs', xs >= 0, z' = 1 + (1 + y') + xs, xs' >= 0, y' >= 0, x'' >= 0
prefix(z, z') -{ 2 }→ and(2, and(s7, prefix(xs'2, xs7))) :|: s7 >= 0, s7 <= 2, x8 >= 0, x'3 >= 0, z' = 1 + 0 + (1 + x8 + xs7), xs7 >= 0, z = 1 + 0 + (1 + x'3 + xs'2), xs'2 >= 0
prefix(z, z') -{ 2 }→ and(1, and(s5, prefix(xs''', xs3))) :|: s5 >= 0, s5 <= 2, z' = 1 + (1 + y'') + (1 + x4 + xs3), x4 >= 0, x'1 >= 0, z = 1 + 0 + (1 + x'1 + xs'''), y'' >= 0, xs''' >= 0, xs3 >= 0
prefix(z, z') -{ 2 }→ and(1, and(s6, prefix(xs'1, xs5))) :|: s6 >= 0, s6 <= 2, x1 >= 0, z' = 1 + 0 + (1 + x6 + xs5), x'2 >= 0, x6 >= 0, z = 1 + (1 + x1) + (1 + x'2 + xs'1), xs5 >= 0, xs'1 >= 0
prefix(z, z') -{ 2 }→ and(0, and(s8, prefix(xs'3, xs9))) :|: s8 >= 0, s8 <= 2, z = 1 + x' + (1 + x'4 + xs'3), z' = 1 + x + (1 + x10 + xs9), x' >= 0, x >= 0, x'4 >= 0, x10 >= 0, xs9 >= 0, xs'3 >= 0
prefix(z, z') -{ 1 }→ 2 :|: z = 1, z' >= 0
prefix(z, z') -{ 2 }→ 2 :|: z' - 1 >= 0, z = 1 + 0 + 1, 2 = 2
prefix(z, z') -{ 1 }→ 1 :|: z = 1 + x + xs, xs >= 0, x >= 0, z' = 1
prefix(z, z') -{ 2 }→ 1 :|: x5 >= 0, z' - 3 >= 0, xs4 >= 0, z = 1 + 0 + (1 + x5 + xs4), 1 = 1
prefix(z, z') -{ 2 }→ 1 :|: xs >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, z = 1 + 0 + 1, 2 = 2, 1 = 1
prefix(z, z') -{ 2 }→ 1 :|: xs6 >= 0, x1 >= 0, z' = 1 + 0 + 1, z = 1 + (1 + x1) + (1 + x7 + xs6), x7 >= 0, 1 = 1
prefix(z, z') -{ 2 }→ 1 :|: z' - 1 >= 0, z - 3 >= 0, 2 = 2, 1 = 1
prefix(z, z') -{ 2 }→ 1 :|: z = 1 + 0 + (1 + x9 + xs8), z' = 1 + 0 + 1, xs8 >= 0, x9 >= 0, 2 = 2, 1 = 1
prefix(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
prefix(z, z') -{ 2 }→ 0 :|: x5 >= 0, z' - 3 >= 0, xs4 >= 0, z = 1 + 0 + (1 + x5 + xs4), v0 >= 0, v1 >= 0, 1 = v0, 1 = v1
prefix(z, z') -{ 2 }→ 0 :|: xs >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, z = 1 + 0 + 1, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1
prefix(z, z') -{ 1 }→ 0 :|: xs >= 0, z - 1 >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1
prefix(z, z') -{ 2 }→ 0 :|: xs6 >= 0, x1 >= 0, z' = 1 + 0 + 1, z = 1 + (1 + x1) + (1 + x7 + xs6), x7 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 1 = v1
prefix(z, z') -{ 2 }→ 0 :|: z' - 1 >= 0, z - 3 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1
prefix(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, x1 >= 0, z = 1 + (1 + x1) + xs', xs' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1
prefix(z, z') -{ 2 }→ 0 :|: z = 1 + 0 + (1 + x9 + xs8), z' = 1 + 0 + 1, xs8 >= 0, x9 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 1 = v1
prefix(z, z') -{ 2 }→ 0 :|: z' - 1 >= 0, z = 1 + 0 + 1, v0 >= 0, v1 >= 0, 2 = v0, 2 = v1
prefix(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 0 = v1
prefix(z, z') -{ 2 }→ 0 :|: z = 1 + x' + (1 + x11 + xs10), x' >= 0, z' - 2 >= 0, x11 >= 0, xs10 >= 0, v0 >= 0, v1 >= 0, 0 = v0, 1 = v1
prefix(z, z') -{ 2 }→ 0 :|: xs >= 0, z' = 1 + x + xs, z - 2 >= 0, x >= 0, v0 >= 0, v1 >= 0, 0 = v0, 2 = v1
prefix(z, z') -{ 1 }→ 0 :|: xs >= 0, z' = 1 + x + xs, x' >= 0, xs' >= 0, x >= 0, z = 1 + x' + xs', v0 >= 0, v1 >= 0, 0 = v0, 0 = v1
strmatch(z, z') -{ 1 }→ domatch(z, z', 1) :|: z >= 0, z' >= 0

Function symbols to be analyzed: {eqNatList[Ite],eqNatList}, {prefix}, {domatch[Ite],domatch}, {strmatch}
Previous analysis results are:
notEmpty: runtime: O(1) [1], size: O(1) [2]
!EQ: runtime: O(1) [0], size: O(1) [2]
and: runtime: O(1) [0], size: O(1) [2]

(33) ResultPropagationProof (UPPER BOUND(ID) transformation)

Applied inner abstraction using the recently inferred runtime/size bounds where possible.

(34) Obligation:

Complexity RNTS consisting of the following rules:

!EQ(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 2, z - 1 >= 0, z' - 1 >= 0
!EQ(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
!EQ(z, z') -{ 0 }→ 1 :|: z' - 1 >= 0, z = 0
!EQ(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
!EQ(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
domatch(z, z', z'') -{ 2 }→ domatch[Ite](and(s9, prefix(xs'4, xs)), 1 + x'5 + xs'4, 1 + x + xs, z'') :|: s9 >= 0, s9 <= 2, xs >= 0, z'' >= 0, z' = 1 + x + xs, x >= 0, z = 1 + x'5 + xs'4, xs'4 >= 0, x'5 >= 0
domatch(z, z', z'') -{ 2 }→ domatch[Ite](2, 1, 1 + x + xs, z'') :|: xs >= 0, z'' >= 0, z' = 1 + x + xs, z = 1, x >= 0
domatch(z, z', z'') -{ 1 }→ domatch[Ite](0, z, 1 + x + xs, z'') :|: z >= 0, xs >= 0, z'' >= 0, z' = 1 + x + xs, x >= 0
domatch(z, z', z'') -{ 1 }→ 1 :|: z = 1 + x + xs, xs >= 0, z'' >= 0, x >= 0, z' = 1
domatch(z, z', z'') -{ 1 }→ 1 + z'' + 1 :|: z'' >= 0, z = 1, z' = 1
domatch[Ite](z, z', z'', z1) -{ 0 }→ domatch(z', xs, 1 + z1 + (1 + 1 + 1)) :|: z' >= 0, xs >= 0, z1 >= 0, z = 1, x >= 0, z'' = 1 + x + xs
domatch[Ite](z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
domatch[Ite](z, z', z'', z1) -{ 0 }→ 1 + z1 + domatch(z', xs, 1 + z1 + (1 + 1 + 1)) :|: z = 2, z' >= 0, xs >= 0, z1 >= 0, x >= 0, z'' = 1 + x + xs
eqNatList(z, z') -{ 1 }→ eqNatList[Ite](s, 1 + y1, ys, 1 + x12, xs) :|: s >= 0, s <= 2, y1 >= 0, xs >= 0, z = 1 + (1 + x12) + xs, ys >= 0, z' = 1 + (1 + y1) + ys, x12 >= 0
eqNatList(z, z') -{ 1 }→ eqNatList[Ite](2, 0, z' - 1, 0, z - 1) :|: z - 1 >= 0, z' - 1 >= 0
eqNatList(z, z') -{ 1 }→ eqNatList[Ite](1, 0, z' - 1, 1 + x13, xs) :|: x13 >= 0, xs >= 0, z' - 1 >= 0, z = 1 + (1 + x13) + xs
eqNatList(z, z') -{ 1 }→ eqNatList[Ite](1, 1 + y2, ys, 0, z - 1) :|: z - 1 >= 0, z' = 1 + (1 + y2) + ys, ys >= 0, y2 >= 0
eqNatList(z, z') -{ 1 }→ eqNatList[Ite](0, y, ys, x, xs) :|: z = 1 + x + xs, xs >= 0, ys >= 0, x >= 0, y >= 0, z' = 1 + y + ys
eqNatList(z, z') -{ 1 }→ 2 :|: z = 1, z' = 1
eqNatList(z, z') -{ 1 }→ 1 :|: z = 1 + x + xs, xs >= 0, x >= 0, z' = 1
eqNatList(z, z') -{ 1 }→ 1 :|: z = 1, ys >= 0, y >= 0, z' = 1 + y + ys
eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }→ eqNatList(z2, z'') :|: z = 2, z2 >= 0, z'' >= 0, z' >= 0, z1 >= 0
eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }→ 1 :|: z2 >= 0, z = 1, z'' >= 0, z' >= 0, z1 >= 0
eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }→ 0 :|: z >= 0, z2 >= 0, z' >= 0, z'' >= 0, z1 >= 0
notEmpty(z) -{ 1 }→ 2 :|: z = 1 + x + xs, xs >= 0, x >= 0
notEmpty(z) -{ 1 }→ 1 :|: z = 1
prefix(z, z') -{ 2 }→ s10 :|: s10 >= 0, s10 <= 2, s2 >= 0, s2 <= 2, xs2 >= 0, z = 1 + (1 + x'') + (1 + x3 + xs2), z' - 3 >= 0, x'' >= 0, x3 >= 0
prefix(z, z') -{ 2 }→ s11 :|: s11 >= 0, s11 <= 2, s3 >= 0, s3 <= 2, xs >= 0, z' = 1 + (1 + y') + xs, y' >= 0, z - 3 >= 0
prefix(z, z') -{ 1 }→ s12 :|: s12 >= 0, s12 <= 2, s4 >= 0, s4 <= 2, z = 1 + (1 + x'') + xs', xs >= 0, z' = 1 + (1 + y') + xs, xs' >= 0, y' >= 0, x'' >= 0
prefix(z, z') -{ 2 }→ and(s'', and(s1, prefix(xs'', xs1))) :|: s'' >= 0, s'' <= 2, s1 >= 0, s1 <= 2, z = 1 + (1 + x'') + (1 + x''' + xs''), z' = 1 + (1 + y') + (1 + x2 + xs1), xs'' >= 0, y' >= 0, xs1 >= 0, x''' >= 0, x'' >= 0, x2 >= 0
prefix(z, z') -{ 2 }→ and(2, and(s7, prefix(xs'2, xs7))) :|: s7 >= 0, s7 <= 2, x8 >= 0, x'3 >= 0, z' = 1 + 0 + (1 + x8 + xs7), xs7 >= 0, z = 1 + 0 + (1 + x'3 + xs'2), xs'2 >= 0
prefix(z, z') -{ 2 }→ and(1, and(s5, prefix(xs''', xs3))) :|: s5 >= 0, s5 <= 2, z' = 1 + (1 + y'') + (1 + x4 + xs3), x4 >= 0, x'1 >= 0, z = 1 + 0 + (1 + x'1 + xs'''), y'' >= 0, xs''' >= 0, xs3 >= 0
prefix(z, z') -{ 2 }→ and(1, and(s6, prefix(xs'1, xs5))) :|: s6 >= 0, s6 <= 2, x1 >= 0, z' = 1 + 0 + (1 + x6 + xs5), x'2 >= 0, x6 >= 0, z = 1 + (1 + x1) + (1 + x'2 + xs'1), xs5 >= 0, xs'1 >= 0
prefix(z, z') -{ 2 }→ and(0, and(s8, prefix(xs'3, xs9))) :|: s8 >= 0, s8 <= 2, z = 1 + x' + (1 + x'4 + xs'3), z' = 1 + x + (1 + x10 + xs9), x' >= 0, x >= 0, x'4 >= 0, x10 >= 0, xs9 >= 0, xs'3 >= 0
prefix(z, z') -{ 1 }→ 2 :|: z = 1, z' >= 0
prefix(z, z') -{ 2 }→ 2 :|: z' - 1 >= 0, z = 1 + 0 + 1, 2 = 2
prefix(z, z') -{ 1 }→ 1 :|: z = 1 + x + xs, xs >= 0, x >= 0, z' = 1
prefix(z, z') -{ 2 }→ 1 :|: x5 >= 0, z' - 3 >= 0, xs4 >= 0, z = 1 + 0 + (1 + x5 + xs4), 1 = 1
prefix(z, z') -{ 2 }→ 1 :|: xs >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, z = 1 + 0 + 1, 2 = 2, 1 = 1
prefix(z, z') -{ 2 }→ 1 :|: xs6 >= 0, x1 >= 0, z' = 1 + 0 + 1, z = 1 + (1 + x1) + (1 + x7 + xs6), x7 >= 0, 1 = 1
prefix(z, z') -{ 2 }→ 1 :|: z' - 1 >= 0, z - 3 >= 0, 2 = 2, 1 = 1
prefix(z, z') -{ 2 }→ 1 :|: z = 1 + 0 + (1 + x9 + xs8), z' = 1 + 0 + 1, xs8 >= 0, x9 >= 0, 2 = 2, 1 = 1
prefix(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
prefix(z, z') -{ 2 }→ 0 :|: x5 >= 0, z' - 3 >= 0, xs4 >= 0, z = 1 + 0 + (1 + x5 + xs4), v0 >= 0, v1 >= 0, 1 = v0, 1 = v1
prefix(z, z') -{ 2 }→ 0 :|: xs >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, z = 1 + 0 + 1, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1
prefix(z, z') -{ 1 }→ 0 :|: xs >= 0, z - 1 >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1
prefix(z, z') -{ 2 }→ 0 :|: xs6 >= 0, x1 >= 0, z' = 1 + 0 + 1, z = 1 + (1 + x1) + (1 + x7 + xs6), x7 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 1 = v1
prefix(z, z') -{ 2 }→ 0 :|: z' - 1 >= 0, z - 3 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1
prefix(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, x1 >= 0, z = 1 + (1 + x1) + xs', xs' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1
prefix(z, z') -{ 2 }→ 0 :|: z = 1 + 0 + (1 + x9 + xs8), z' = 1 + 0 + 1, xs8 >= 0, x9 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 1 = v1
prefix(z, z') -{ 2 }→ 0 :|: z' - 1 >= 0, z = 1 + 0 + 1, v0 >= 0, v1 >= 0, 2 = v0, 2 = v1
prefix(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 0 = v1
prefix(z, z') -{ 2 }→ 0 :|: z = 1 + x' + (1 + x11 + xs10), x' >= 0, z' - 2 >= 0, x11 >= 0, xs10 >= 0, v0 >= 0, v1 >= 0, 0 = v0, 1 = v1
prefix(z, z') -{ 2 }→ 0 :|: xs >= 0, z' = 1 + x + xs, z - 2 >= 0, x >= 0, v0 >= 0, v1 >= 0, 0 = v0, 2 = v1
prefix(z, z') -{ 1 }→ 0 :|: xs >= 0, z' = 1 + x + xs, x' >= 0, xs' >= 0, x >= 0, z = 1 + x' + xs', v0 >= 0, v1 >= 0, 0 = v0, 0 = v1
strmatch(z, z') -{ 1 }→ domatch(z, z', 1) :|: z >= 0, z' >= 0

Function symbols to be analyzed: {eqNatList[Ite],eqNatList}, {prefix}, {domatch[Ite],domatch}, {strmatch}
Previous analysis results are:
notEmpty: runtime: O(1) [1], size: O(1) [2]
!EQ: runtime: O(1) [0], size: O(1) [2]
and: runtime: O(1) [0], size: O(1) [2]

(35) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed SIZE bound using CoFloCo for: eqNatList[Ite]
after applying outer abstraction to obtain an ITS,
resulting in: O(1) with polynomial bound: 2

Computed SIZE bound using CoFloCo for: eqNatList
after applying outer abstraction to obtain an ITS,
resulting in: O(1) with polynomial bound: 2

(36) Obligation:

Complexity RNTS consisting of the following rules:

!EQ(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 2, z - 1 >= 0, z' - 1 >= 0
!EQ(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
!EQ(z, z') -{ 0 }→ 1 :|: z' - 1 >= 0, z = 0
!EQ(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
!EQ(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
domatch(z, z', z'') -{ 2 }→ domatch[Ite](and(s9, prefix(xs'4, xs)), 1 + x'5 + xs'4, 1 + x + xs, z'') :|: s9 >= 0, s9 <= 2, xs >= 0, z'' >= 0, z' = 1 + x + xs, x >= 0, z = 1 + x'5 + xs'4, xs'4 >= 0, x'5 >= 0
domatch(z, z', z'') -{ 2 }→ domatch[Ite](2, 1, 1 + x + xs, z'') :|: xs >= 0, z'' >= 0, z' = 1 + x + xs, z = 1, x >= 0
domatch(z, z', z'') -{ 1 }→ domatch[Ite](0, z, 1 + x + xs, z'') :|: z >= 0, xs >= 0, z'' >= 0, z' = 1 + x + xs, x >= 0
domatch(z, z', z'') -{ 1 }→ 1 :|: z = 1 + x + xs, xs >= 0, z'' >= 0, x >= 0, z' = 1
domatch(z, z', z'') -{ 1 }→ 1 + z'' + 1 :|: z'' >= 0, z = 1, z' = 1
domatch[Ite](z, z', z'', z1) -{ 0 }→ domatch(z', xs, 1 + z1 + (1 + 1 + 1)) :|: z' >= 0, xs >= 0, z1 >= 0, z = 1, x >= 0, z'' = 1 + x + xs
domatch[Ite](z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
domatch[Ite](z, z', z'', z1) -{ 0 }→ 1 + z1 + domatch(z', xs, 1 + z1 + (1 + 1 + 1)) :|: z = 2, z' >= 0, xs >= 0, z1 >= 0, x >= 0, z'' = 1 + x + xs
eqNatList(z, z') -{ 1 }→ eqNatList[Ite](s, 1 + y1, ys, 1 + x12, xs) :|: s >= 0, s <= 2, y1 >= 0, xs >= 0, z = 1 + (1 + x12) + xs, ys >= 0, z' = 1 + (1 + y1) + ys, x12 >= 0
eqNatList(z, z') -{ 1 }→ eqNatList[Ite](2, 0, z' - 1, 0, z - 1) :|: z - 1 >= 0, z' - 1 >= 0
eqNatList(z, z') -{ 1 }→ eqNatList[Ite](1, 0, z' - 1, 1 + x13, xs) :|: x13 >= 0, xs >= 0, z' - 1 >= 0, z = 1 + (1 + x13) + xs
eqNatList(z, z') -{ 1 }→ eqNatList[Ite](1, 1 + y2, ys, 0, z - 1) :|: z - 1 >= 0, z' = 1 + (1 + y2) + ys, ys >= 0, y2 >= 0
eqNatList(z, z') -{ 1 }→ eqNatList[Ite](0, y, ys, x, xs) :|: z = 1 + x + xs, xs >= 0, ys >= 0, x >= 0, y >= 0, z' = 1 + y + ys
eqNatList(z, z') -{ 1 }→ 2 :|: z = 1, z' = 1
eqNatList(z, z') -{ 1 }→ 1 :|: z = 1 + x + xs, xs >= 0, x >= 0, z' = 1
eqNatList(z, z') -{ 1 }→ 1 :|: z = 1, ys >= 0, y >= 0, z' = 1 + y + ys
eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }→ eqNatList(z2, z'') :|: z = 2, z2 >= 0, z'' >= 0, z' >= 0, z1 >= 0
eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }→ 1 :|: z2 >= 0, z = 1, z'' >= 0, z' >= 0, z1 >= 0
eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }→ 0 :|: z >= 0, z2 >= 0, z' >= 0, z'' >= 0, z1 >= 0
notEmpty(z) -{ 1 }→ 2 :|: z = 1 + x + xs, xs >= 0, x >= 0
notEmpty(z) -{ 1 }→ 1 :|: z = 1
prefix(z, z') -{ 2 }→ s10 :|: s10 >= 0, s10 <= 2, s2 >= 0, s2 <= 2, xs2 >= 0, z = 1 + (1 + x'') + (1 + x3 + xs2), z' - 3 >= 0, x'' >= 0, x3 >= 0
prefix(z, z') -{ 2 }→ s11 :|: s11 >= 0, s11 <= 2, s3 >= 0, s3 <= 2, xs >= 0, z' = 1 + (1 + y') + xs, y' >= 0, z - 3 >= 0
prefix(z, z') -{ 1 }→ s12 :|: s12 >= 0, s12 <= 2, s4 >= 0, s4 <= 2, z = 1 + (1 + x'') + xs', xs >= 0, z' = 1 + (1 + y') + xs, xs' >= 0, y' >= 0, x'' >= 0
prefix(z, z') -{ 2 }→ and(s'', and(s1, prefix(xs'', xs1))) :|: s'' >= 0, s'' <= 2, s1 >= 0, s1 <= 2, z = 1 + (1 + x'') + (1 + x''' + xs''), z' = 1 + (1 + y') + (1 + x2 + xs1), xs'' >= 0, y' >= 0, xs1 >= 0, x''' >= 0, x'' >= 0, x2 >= 0
prefix(z, z') -{ 2 }→ and(2, and(s7, prefix(xs'2, xs7))) :|: s7 >= 0, s7 <= 2, x8 >= 0, x'3 >= 0, z' = 1 + 0 + (1 + x8 + xs7), xs7 >= 0, z = 1 + 0 + (1 + x'3 + xs'2), xs'2 >= 0
prefix(z, z') -{ 2 }→ and(1, and(s5, prefix(xs''', xs3))) :|: s5 >= 0, s5 <= 2, z' = 1 + (1 + y'') + (1 + x4 + xs3), x4 >= 0, x'1 >= 0, z = 1 + 0 + (1 + x'1 + xs'''), y'' >= 0, xs''' >= 0, xs3 >= 0
prefix(z, z') -{ 2 }→ and(1, and(s6, prefix(xs'1, xs5))) :|: s6 >= 0, s6 <= 2, x1 >= 0, z' = 1 + 0 + (1 + x6 + xs5), x'2 >= 0, x6 >= 0, z = 1 + (1 + x1) + (1 + x'2 + xs'1), xs5 >= 0, xs'1 >= 0
prefix(z, z') -{ 2 }→ and(0, and(s8, prefix(xs'3, xs9))) :|: s8 >= 0, s8 <= 2, z = 1 + x' + (1 + x'4 + xs'3), z' = 1 + x + (1 + x10 + xs9), x' >= 0, x >= 0, x'4 >= 0, x10 >= 0, xs9 >= 0, xs'3 >= 0
prefix(z, z') -{ 1 }→ 2 :|: z = 1, z' >= 0
prefix(z, z') -{ 2 }→ 2 :|: z' - 1 >= 0, z = 1 + 0 + 1, 2 = 2
prefix(z, z') -{ 1 }→ 1 :|: z = 1 + x + xs, xs >= 0, x >= 0, z' = 1
prefix(z, z') -{ 2 }→ 1 :|: x5 >= 0, z' - 3 >= 0, xs4 >= 0, z = 1 + 0 + (1 + x5 + xs4), 1 = 1
prefix(z, z') -{ 2 }→ 1 :|: xs >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, z = 1 + 0 + 1, 2 = 2, 1 = 1
prefix(z, z') -{ 2 }→ 1 :|: xs6 >= 0, x1 >= 0, z' = 1 + 0 + 1, z = 1 + (1 + x1) + (1 + x7 + xs6), x7 >= 0, 1 = 1
prefix(z, z') -{ 2 }→ 1 :|: z' - 1 >= 0, z - 3 >= 0, 2 = 2, 1 = 1
prefix(z, z') -{ 2 }→ 1 :|: z = 1 + 0 + (1 + x9 + xs8), z' = 1 + 0 + 1, xs8 >= 0, x9 >= 0, 2 = 2, 1 = 1
prefix(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
prefix(z, z') -{ 2 }→ 0 :|: x5 >= 0, z' - 3 >= 0, xs4 >= 0, z = 1 + 0 + (1 + x5 + xs4), v0 >= 0, v1 >= 0, 1 = v0, 1 = v1
prefix(z, z') -{ 2 }→ 0 :|: xs >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, z = 1 + 0 + 1, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1
prefix(z, z') -{ 1 }→ 0 :|: xs >= 0, z - 1 >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1
prefix(z, z') -{ 2 }→ 0 :|: xs6 >= 0, x1 >= 0, z' = 1 + 0 + 1, z = 1 + (1 + x1) + (1 + x7 + xs6), x7 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 1 = v1
prefix(z, z') -{ 2 }→ 0 :|: z' - 1 >= 0, z - 3 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1
prefix(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, x1 >= 0, z = 1 + (1 + x1) + xs', xs' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1
prefix(z, z') -{ 2 }→ 0 :|: z = 1 + 0 + (1 + x9 + xs8), z' = 1 + 0 + 1, xs8 >= 0, x9 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 1 = v1
prefix(z, z') -{ 2 }→ 0 :|: z' - 1 >= 0, z = 1 + 0 + 1, v0 >= 0, v1 >= 0, 2 = v0, 2 = v1
prefix(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 0 = v1
prefix(z, z') -{ 2 }→ 0 :|: z = 1 + x' + (1 + x11 + xs10), x' >= 0, z' - 2 >= 0, x11 >= 0, xs10 >= 0, v0 >= 0, v1 >= 0, 0 = v0, 1 = v1
prefix(z, z') -{ 2 }→ 0 :|: xs >= 0, z' = 1 + x + xs, z - 2 >= 0, x >= 0, v0 >= 0, v1 >= 0, 0 = v0, 2 = v1
prefix(z, z') -{ 1 }→ 0 :|: xs >= 0, z' = 1 + x + xs, x' >= 0, xs' >= 0, x >= 0, z = 1 + x' + xs', v0 >= 0, v1 >= 0, 0 = v0, 0 = v1
strmatch(z, z') -{ 1 }→ domatch(z, z', 1) :|: z >= 0, z' >= 0

Function symbols to be analyzed: {eqNatList[Ite],eqNatList}, {prefix}, {domatch[Ite],domatch}, {strmatch}
Previous analysis results are:
notEmpty: runtime: O(1) [1], size: O(1) [2]
!EQ: runtime: O(1) [0], size: O(1) [2]
and: runtime: O(1) [0], size: O(1) [2]
eqNatList[Ite]: runtime: ?, size: O(1) [2]
eqNatList: runtime: ?, size: O(1) [2]

(37) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed RUNTIME bound using PUBS for: eqNatList[Ite]
after applying outer abstraction to obtain an ITS,
resulting in: O(n1) with polynomial bound: 1 + z2

Computed RUNTIME bound using CoFloCo for: eqNatList
after applying outer abstraction to obtain an ITS,
resulting in: O(n1) with polynomial bound: 1 + z

(38) Obligation:

Complexity RNTS consisting of the following rules:

!EQ(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 2, z - 1 >= 0, z' - 1 >= 0
!EQ(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
!EQ(z, z') -{ 0 }→ 1 :|: z' - 1 >= 0, z = 0
!EQ(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
!EQ(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
domatch(z, z', z'') -{ 2 }→ domatch[Ite](and(s9, prefix(xs'4, xs)), 1 + x'5 + xs'4, 1 + x + xs, z'') :|: s9 >= 0, s9 <= 2, xs >= 0, z'' >= 0, z' = 1 + x + xs, x >= 0, z = 1 + x'5 + xs'4, xs'4 >= 0, x'5 >= 0
domatch(z, z', z'') -{ 2 }→ domatch[Ite](2, 1, 1 + x + xs, z'') :|: xs >= 0, z'' >= 0, z' = 1 + x + xs, z = 1, x >= 0
domatch(z, z', z'') -{ 1 }→ domatch[Ite](0, z, 1 + x + xs, z'') :|: z >= 0, xs >= 0, z'' >= 0, z' = 1 + x + xs, x >= 0
domatch(z, z', z'') -{ 1 }→ 1 :|: z = 1 + x + xs, xs >= 0, z'' >= 0, x >= 0, z' = 1
domatch(z, z', z'') -{ 1 }→ 1 + z'' + 1 :|: z'' >= 0, z = 1, z' = 1
domatch[Ite](z, z', z'', z1) -{ 0 }→ domatch(z', xs, 1 + z1 + (1 + 1 + 1)) :|: z' >= 0, xs >= 0, z1 >= 0, z = 1, x >= 0, z'' = 1 + x + xs
domatch[Ite](z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
domatch[Ite](z, z', z'', z1) -{ 0 }→ 1 + z1 + domatch(z', xs, 1 + z1 + (1 + 1 + 1)) :|: z = 2, z' >= 0, xs >= 0, z1 >= 0, x >= 0, z'' = 1 + x + xs
eqNatList(z, z') -{ 1 }→ eqNatList[Ite](s, 1 + y1, ys, 1 + x12, xs) :|: s >= 0, s <= 2, y1 >= 0, xs >= 0, z = 1 + (1 + x12) + xs, ys >= 0, z' = 1 + (1 + y1) + ys, x12 >= 0
eqNatList(z, z') -{ 1 }→ eqNatList[Ite](2, 0, z' - 1, 0, z - 1) :|: z - 1 >= 0, z' - 1 >= 0
eqNatList(z, z') -{ 1 }→ eqNatList[Ite](1, 0, z' - 1, 1 + x13, xs) :|: x13 >= 0, xs >= 0, z' - 1 >= 0, z = 1 + (1 + x13) + xs
eqNatList(z, z') -{ 1 }→ eqNatList[Ite](1, 1 + y2, ys, 0, z - 1) :|: z - 1 >= 0, z' = 1 + (1 + y2) + ys, ys >= 0, y2 >= 0
eqNatList(z, z') -{ 1 }→ eqNatList[Ite](0, y, ys, x, xs) :|: z = 1 + x + xs, xs >= 0, ys >= 0, x >= 0, y >= 0, z' = 1 + y + ys
eqNatList(z, z') -{ 1 }→ 2 :|: z = 1, z' = 1
eqNatList(z, z') -{ 1 }→ 1 :|: z = 1 + x + xs, xs >= 0, x >= 0, z' = 1
eqNatList(z, z') -{ 1 }→ 1 :|: z = 1, ys >= 0, y >= 0, z' = 1 + y + ys
eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }→ eqNatList(z2, z'') :|: z = 2, z2 >= 0, z'' >= 0, z' >= 0, z1 >= 0
eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }→ 1 :|: z2 >= 0, z = 1, z'' >= 0, z' >= 0, z1 >= 0
eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }→ 0 :|: z >= 0, z2 >= 0, z' >= 0, z'' >= 0, z1 >= 0
notEmpty(z) -{ 1 }→ 2 :|: z = 1 + x + xs, xs >= 0, x >= 0
notEmpty(z) -{ 1 }→ 1 :|: z = 1
prefix(z, z') -{ 2 }→ s10 :|: s10 >= 0, s10 <= 2, s2 >= 0, s2 <= 2, xs2 >= 0, z = 1 + (1 + x'') + (1 + x3 + xs2), z' - 3 >= 0, x'' >= 0, x3 >= 0
prefix(z, z') -{ 2 }→ s11 :|: s11 >= 0, s11 <= 2, s3 >= 0, s3 <= 2, xs >= 0, z' = 1 + (1 + y') + xs, y' >= 0, z - 3 >= 0
prefix(z, z') -{ 1 }→ s12 :|: s12 >= 0, s12 <= 2, s4 >= 0, s4 <= 2, z = 1 + (1 + x'') + xs', xs >= 0, z' = 1 + (1 + y') + xs, xs' >= 0, y' >= 0, x'' >= 0
prefix(z, z') -{ 2 }→ and(s'', and(s1, prefix(xs'', xs1))) :|: s'' >= 0, s'' <= 2, s1 >= 0, s1 <= 2, z = 1 + (1 + x'') + (1 + x''' + xs''), z' = 1 + (1 + y') + (1 + x2 + xs1), xs'' >= 0, y' >= 0, xs1 >= 0, x''' >= 0, x'' >= 0, x2 >= 0
prefix(z, z') -{ 2 }→ and(2, and(s7, prefix(xs'2, xs7))) :|: s7 >= 0, s7 <= 2, x8 >= 0, x'3 >= 0, z' = 1 + 0 + (1 + x8 + xs7), xs7 >= 0, z = 1 + 0 + (1 + x'3 + xs'2), xs'2 >= 0
prefix(z, z') -{ 2 }→ and(1, and(s5, prefix(xs''', xs3))) :|: s5 >= 0, s5 <= 2, z' = 1 + (1 + y'') + (1 + x4 + xs3), x4 >= 0, x'1 >= 0, z = 1 + 0 + (1 + x'1 + xs'''), y'' >= 0, xs''' >= 0, xs3 >= 0
prefix(z, z') -{ 2 }→ and(1, and(s6, prefix(xs'1, xs5))) :|: s6 >= 0, s6 <= 2, x1 >= 0, z' = 1 + 0 + (1 + x6 + xs5), x'2 >= 0, x6 >= 0, z = 1 + (1 + x1) + (1 + x'2 + xs'1), xs5 >= 0, xs'1 >= 0
prefix(z, z') -{ 2 }→ and(0, and(s8, prefix(xs'3, xs9))) :|: s8 >= 0, s8 <= 2, z = 1 + x' + (1 + x'4 + xs'3), z' = 1 + x + (1 + x10 + xs9), x' >= 0, x >= 0, x'4 >= 0, x10 >= 0, xs9 >= 0, xs'3 >= 0
prefix(z, z') -{ 1 }→ 2 :|: z = 1, z' >= 0
prefix(z, z') -{ 2 }→ 2 :|: z' - 1 >= 0, z = 1 + 0 + 1, 2 = 2
prefix(z, z') -{ 1 }→ 1 :|: z = 1 + x + xs, xs >= 0, x >= 0, z' = 1
prefix(z, z') -{ 2 }→ 1 :|: x5 >= 0, z' - 3 >= 0, xs4 >= 0, z = 1 + 0 + (1 + x5 + xs4), 1 = 1
prefix(z, z') -{ 2 }→ 1 :|: xs >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, z = 1 + 0 + 1, 2 = 2, 1 = 1
prefix(z, z') -{ 2 }→ 1 :|: xs6 >= 0, x1 >= 0, z' = 1 + 0 + 1, z = 1 + (1 + x1) + (1 + x7 + xs6), x7 >= 0, 1 = 1
prefix(z, z') -{ 2 }→ 1 :|: z' - 1 >= 0, z - 3 >= 0, 2 = 2, 1 = 1
prefix(z, z') -{ 2 }→ 1 :|: z = 1 + 0 + (1 + x9 + xs8), z' = 1 + 0 + 1, xs8 >= 0, x9 >= 0, 2 = 2, 1 = 1
prefix(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
prefix(z, z') -{ 2 }→ 0 :|: x5 >= 0, z' - 3 >= 0, xs4 >= 0, z = 1 + 0 + (1 + x5 + xs4), v0 >= 0, v1 >= 0, 1 = v0, 1 = v1
prefix(z, z') -{ 2 }→ 0 :|: xs >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, z = 1 + 0 + 1, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1
prefix(z, z') -{ 1 }→ 0 :|: xs >= 0, z - 1 >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1
prefix(z, z') -{ 2 }→ 0 :|: xs6 >= 0, x1 >= 0, z' = 1 + 0 + 1, z = 1 + (1 + x1) + (1 + x7 + xs6), x7 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 1 = v1
prefix(z, z') -{ 2 }→ 0 :|: z' - 1 >= 0, z - 3 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1
prefix(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, x1 >= 0, z = 1 + (1 + x1) + xs', xs' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1
prefix(z, z') -{ 2 }→ 0 :|: z = 1 + 0 + (1 + x9 + xs8), z' = 1 + 0 + 1, xs8 >= 0, x9 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 1 = v1
prefix(z, z') -{ 2 }→ 0 :|: z' - 1 >= 0, z = 1 + 0 + 1, v0 >= 0, v1 >= 0, 2 = v0, 2 = v1
prefix(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 0 = v1
prefix(z, z') -{ 2 }→ 0 :|: z = 1 + x' + (1 + x11 + xs10), x' >= 0, z' - 2 >= 0, x11 >= 0, xs10 >= 0, v0 >= 0, v1 >= 0, 0 = v0, 1 = v1
prefix(z, z') -{ 2 }→ 0 :|: xs >= 0, z' = 1 + x + xs, z - 2 >= 0, x >= 0, v0 >= 0, v1 >= 0, 0 = v0, 2 = v1
prefix(z, z') -{ 1 }→ 0 :|: xs >= 0, z' = 1 + x + xs, x' >= 0, xs' >= 0, x >= 0, z = 1 + x' + xs', v0 >= 0, v1 >= 0, 0 = v0, 0 = v1
strmatch(z, z') -{ 1 }→ domatch(z, z', 1) :|: z >= 0, z' >= 0

Function symbols to be analyzed: {prefix}, {domatch[Ite],domatch}, {strmatch}
Previous analysis results are:
notEmpty: runtime: O(1) [1], size: O(1) [2]
!EQ: runtime: O(1) [0], size: O(1) [2]
and: runtime: O(1) [0], size: O(1) [2]
eqNatList[Ite]: runtime: O(n1) [1 + z2], size: O(1) [2]
eqNatList: runtime: O(n1) [1 + z], size: O(1) [2]

(39) ResultPropagationProof (UPPER BOUND(ID) transformation)

Applied inner abstraction using the recently inferred runtime/size bounds where possible.

(40) Obligation:

Complexity RNTS consisting of the following rules:

!EQ(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 2, z - 1 >= 0, z' - 1 >= 0
!EQ(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
!EQ(z, z') -{ 0 }→ 1 :|: z' - 1 >= 0, z = 0
!EQ(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
!EQ(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
domatch(z, z', z'') -{ 2 }→ domatch[Ite](and(s9, prefix(xs'4, xs)), 1 + x'5 + xs'4, 1 + x + xs, z'') :|: s9 >= 0, s9 <= 2, xs >= 0, z'' >= 0, z' = 1 + x + xs, x >= 0, z = 1 + x'5 + xs'4, xs'4 >= 0, x'5 >= 0
domatch(z, z', z'') -{ 2 }→ domatch[Ite](2, 1, 1 + x + xs, z'') :|: xs >= 0, z'' >= 0, z' = 1 + x + xs, z = 1, x >= 0
domatch(z, z', z'') -{ 1 }→ domatch[Ite](0, z, 1 + x + xs, z'') :|: z >= 0, xs >= 0, z'' >= 0, z' = 1 + x + xs, x >= 0
domatch(z, z', z'') -{ 1 }→ 1 :|: z = 1 + x + xs, xs >= 0, z'' >= 0, x >= 0, z' = 1
domatch(z, z', z'') -{ 1 }→ 1 + z'' + 1 :|: z'' >= 0, z = 1, z' = 1
domatch[Ite](z, z', z'', z1) -{ 0 }→ domatch(z', xs, 1 + z1 + (1 + 1 + 1)) :|: z' >= 0, xs >= 0, z1 >= 0, z = 1, x >= 0, z'' = 1 + x + xs
domatch[Ite](z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
domatch[Ite](z, z', z'', z1) -{ 0 }→ 1 + z1 + domatch(z', xs, 1 + z1 + (1 + 1 + 1)) :|: z = 2, z' >= 0, xs >= 0, z1 >= 0, x >= 0, z'' = 1 + x + xs
eqNatList(z, z') -{ 2 + xs }→ s13 :|: s13 >= 0, s13 <= 2, s >= 0, s <= 2, y1 >= 0, xs >= 0, z = 1 + (1 + x12) + xs, ys >= 0, z' = 1 + (1 + y1) + ys, x12 >= 0
eqNatList(z, z') -{ 1 + z }→ s14 :|: s14 >= 0, s14 <= 2, z - 1 >= 0, z' = 1 + (1 + y2) + ys, ys >= 0, y2 >= 0
eqNatList(z, z') -{ 2 + xs }→ s15 :|: s15 >= 0, s15 <= 2, x13 >= 0, xs >= 0, z' - 1 >= 0, z = 1 + (1 + x13) + xs
eqNatList(z, z') -{ 1 + z }→ s16 :|: s16 >= 0, s16 <= 2, z - 1 >= 0, z' - 1 >= 0
eqNatList(z, z') -{ 2 + xs }→ s17 :|: s17 >= 0, s17 <= 2, z = 1 + x + xs, xs >= 0, ys >= 0, x >= 0, y >= 0, z' = 1 + y + ys
eqNatList(z, z') -{ 1 }→ 2 :|: z = 1, z' = 1
eqNatList(z, z') -{ 1 }→ 1 :|: z = 1 + x + xs, xs >= 0, x >= 0, z' = 1
eqNatList(z, z') -{ 1 }→ 1 :|: z = 1, ys >= 0, y >= 0, z' = 1 + y + ys
eqNatList[Ite](z, z', z'', z1, z2) -{ 1 + z2 }→ s18 :|: s18 >= 0, s18 <= 2, z = 2, z2 >= 0, z'' >= 0, z' >= 0, z1 >= 0
eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }→ 1 :|: z2 >= 0, z = 1, z'' >= 0, z' >= 0, z1 >= 0
eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }→ 0 :|: z >= 0, z2 >= 0, z' >= 0, z'' >= 0, z1 >= 0
notEmpty(z) -{ 1 }→ 2 :|: z = 1 + x + xs, xs >= 0, x >= 0
notEmpty(z) -{ 1 }→ 1 :|: z = 1
prefix(z, z') -{ 2 }→ s10 :|: s10 >= 0, s10 <= 2, s2 >= 0, s2 <= 2, xs2 >= 0, z = 1 + (1 + x'') + (1 + x3 + xs2), z' - 3 >= 0, x'' >= 0, x3 >= 0
prefix(z, z') -{ 2 }→ s11 :|: s11 >= 0, s11 <= 2, s3 >= 0, s3 <= 2, xs >= 0, z' = 1 + (1 + y') + xs, y' >= 0, z - 3 >= 0
prefix(z, z') -{ 1 }→ s12 :|: s12 >= 0, s12 <= 2, s4 >= 0, s4 <= 2, z = 1 + (1 + x'') + xs', xs >= 0, z' = 1 + (1 + y') + xs, xs' >= 0, y' >= 0, x'' >= 0
prefix(z, z') -{ 2 }→ and(s'', and(s1, prefix(xs'', xs1))) :|: s'' >= 0, s'' <= 2, s1 >= 0, s1 <= 2, z = 1 + (1 + x'') + (1 + x''' + xs''), z' = 1 + (1 + y') + (1 + x2 + xs1), xs'' >= 0, y' >= 0, xs1 >= 0, x''' >= 0, x'' >= 0, x2 >= 0
prefix(z, z') -{ 2 }→ and(2, and(s7, prefix(xs'2, xs7))) :|: s7 >= 0, s7 <= 2, x8 >= 0, x'3 >= 0, z' = 1 + 0 + (1 + x8 + xs7), xs7 >= 0, z = 1 + 0 + (1 + x'3 + xs'2), xs'2 >= 0
prefix(z, z') -{ 2 }→ and(1, and(s5, prefix(xs''', xs3))) :|: s5 >= 0, s5 <= 2, z' = 1 + (1 + y'') + (1 + x4 + xs3), x4 >= 0, x'1 >= 0, z = 1 + 0 + (1 + x'1 + xs'''), y'' >= 0, xs''' >= 0, xs3 >= 0
prefix(z, z') -{ 2 }→ and(1, and(s6, prefix(xs'1, xs5))) :|: s6 >= 0, s6 <= 2, x1 >= 0, z' = 1 + 0 + (1 + x6 + xs5), x'2 >= 0, x6 >= 0, z = 1 + (1 + x1) + (1 + x'2 + xs'1), xs5 >= 0, xs'1 >= 0
prefix(z, z') -{ 2 }→ and(0, and(s8, prefix(xs'3, xs9))) :|: s8 >= 0, s8 <= 2, z = 1 + x' + (1 + x'4 + xs'3), z' = 1 + x + (1 + x10 + xs9), x' >= 0, x >= 0, x'4 >= 0, x10 >= 0, xs9 >= 0, xs'3 >= 0
prefix(z, z') -{ 1 }→ 2 :|: z = 1, z' >= 0
prefix(z, z') -{ 2 }→ 2 :|: z' - 1 >= 0, z = 1 + 0 + 1, 2 = 2
prefix(z, z') -{ 1 }→ 1 :|: z = 1 + x + xs, xs >= 0, x >= 0, z' = 1
prefix(z, z') -{ 2 }→ 1 :|: x5 >= 0, z' - 3 >= 0, xs4 >= 0, z = 1 + 0 + (1 + x5 + xs4), 1 = 1
prefix(z, z') -{ 2 }→ 1 :|: xs >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, z = 1 + 0 + 1, 2 = 2, 1 = 1
prefix(z, z') -{ 2 }→ 1 :|: xs6 >= 0, x1 >= 0, z' = 1 + 0 + 1, z = 1 + (1 + x1) + (1 + x7 + xs6), x7 >= 0, 1 = 1
prefix(z, z') -{ 2 }→ 1 :|: z' - 1 >= 0, z - 3 >= 0, 2 = 2, 1 = 1
prefix(z, z') -{ 2 }→ 1 :|: z = 1 + 0 + (1 + x9 + xs8), z' = 1 + 0 + 1, xs8 >= 0, x9 >= 0, 2 = 2, 1 = 1
prefix(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
prefix(z, z') -{ 2 }→ 0 :|: x5 >= 0, z' - 3 >= 0, xs4 >= 0, z = 1 + 0 + (1 + x5 + xs4), v0 >= 0, v1 >= 0, 1 = v0, 1 = v1
prefix(z, z') -{ 2 }→ 0 :|: xs >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, z = 1 + 0 + 1, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1
prefix(z, z') -{ 1 }→ 0 :|: xs >= 0, z - 1 >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1
prefix(z, z') -{ 2 }→ 0 :|: xs6 >= 0, x1 >= 0, z' = 1 + 0 + 1, z = 1 + (1 + x1) + (1 + x7 + xs6), x7 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 1 = v1
prefix(z, z') -{ 2 }→ 0 :|: z' - 1 >= 0, z - 3 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1
prefix(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, x1 >= 0, z = 1 + (1 + x1) + xs', xs' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1
prefix(z, z') -{ 2 }→ 0 :|: z = 1 + 0 + (1 + x9 + xs8), z' = 1 + 0 + 1, xs8 >= 0, x9 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 1 = v1
prefix(z, z') -{ 2 }→ 0 :|: z' - 1 >= 0, z = 1 + 0 + 1, v0 >= 0, v1 >= 0, 2 = v0, 2 = v1
prefix(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 0 = v1
prefix(z, z') -{ 2 }→ 0 :|: z = 1 + x' + (1 + x11 + xs10), x' >= 0, z' - 2 >= 0, x11 >= 0, xs10 >= 0, v0 >= 0, v1 >= 0, 0 = v0, 1 = v1
prefix(z, z') -{ 2 }→ 0 :|: xs >= 0, z' = 1 + x + xs, z - 2 >= 0, x >= 0, v0 >= 0, v1 >= 0, 0 = v0, 2 = v1
prefix(z, z') -{ 1 }→ 0 :|: xs >= 0, z' = 1 + x + xs, x' >= 0, xs' >= 0, x >= 0, z = 1 + x' + xs', v0 >= 0, v1 >= 0, 0 = v0, 0 = v1
strmatch(z, z') -{ 1 }→ domatch(z, z', 1) :|: z >= 0, z' >= 0

Function symbols to be analyzed: {prefix}, {domatch[Ite],domatch}, {strmatch}
Previous analysis results are:
notEmpty: runtime: O(1) [1], size: O(1) [2]
!EQ: runtime: O(1) [0], size: O(1) [2]
and: runtime: O(1) [0], size: O(1) [2]
eqNatList[Ite]: runtime: O(n1) [1 + z2], size: O(1) [2]
eqNatList: runtime: O(n1) [1 + z], size: O(1) [2]

(41) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed SIZE bound using CoFloCo for: prefix
after applying outer abstraction to obtain an ITS,
resulting in: O(1) with polynomial bound: 2

(42) Obligation:

Complexity RNTS consisting of the following rules:

!EQ(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 2, z - 1 >= 0, z' - 1 >= 0
!EQ(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
!EQ(z, z') -{ 0 }→ 1 :|: z' - 1 >= 0, z = 0
!EQ(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
!EQ(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
domatch(z, z', z'') -{ 2 }→ domatch[Ite](and(s9, prefix(xs'4, xs)), 1 + x'5 + xs'4, 1 + x + xs, z'') :|: s9 >= 0, s9 <= 2, xs >= 0, z'' >= 0, z' = 1 + x + xs, x >= 0, z = 1 + x'5 + xs'4, xs'4 >= 0, x'5 >= 0
domatch(z, z', z'') -{ 2 }→ domatch[Ite](2, 1, 1 + x + xs, z'') :|: xs >= 0, z'' >= 0, z' = 1 + x + xs, z = 1, x >= 0
domatch(z, z', z'') -{ 1 }→ domatch[Ite](0, z, 1 + x + xs, z'') :|: z >= 0, xs >= 0, z'' >= 0, z' = 1 + x + xs, x >= 0
domatch(z, z', z'') -{ 1 }→ 1 :|: z = 1 + x + xs, xs >= 0, z'' >= 0, x >= 0, z' = 1
domatch(z, z', z'') -{ 1 }→ 1 + z'' + 1 :|: z'' >= 0, z = 1, z' = 1
domatch[Ite](z, z', z'', z1) -{ 0 }→ domatch(z', xs, 1 + z1 + (1 + 1 + 1)) :|: z' >= 0, xs >= 0, z1 >= 0, z = 1, x >= 0, z'' = 1 + x + xs
domatch[Ite](z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
domatch[Ite](z, z', z'', z1) -{ 0 }→ 1 + z1 + domatch(z', xs, 1 + z1 + (1 + 1 + 1)) :|: z = 2, z' >= 0, xs >= 0, z1 >= 0, x >= 0, z'' = 1 + x + xs
eqNatList(z, z') -{ 2 + xs }→ s13 :|: s13 >= 0, s13 <= 2, s >= 0, s <= 2, y1 >= 0, xs >= 0, z = 1 + (1 + x12) + xs, ys >= 0, z' = 1 + (1 + y1) + ys, x12 >= 0
eqNatList(z, z') -{ 1 + z }→ s14 :|: s14 >= 0, s14 <= 2, z - 1 >= 0, z' = 1 + (1 + y2) + ys, ys >= 0, y2 >= 0
eqNatList(z, z') -{ 2 + xs }→ s15 :|: s15 >= 0, s15 <= 2, x13 >= 0, xs >= 0, z' - 1 >= 0, z = 1 + (1 + x13) + xs
eqNatList(z, z') -{ 1 + z }→ s16 :|: s16 >= 0, s16 <= 2, z - 1 >= 0, z' - 1 >= 0
eqNatList(z, z') -{ 2 + xs }→ s17 :|: s17 >= 0, s17 <= 2, z = 1 + x + xs, xs >= 0, ys >= 0, x >= 0, y >= 0, z' = 1 + y + ys
eqNatList(z, z') -{ 1 }→ 2 :|: z = 1, z' = 1
eqNatList(z, z') -{ 1 }→ 1 :|: z = 1 + x + xs, xs >= 0, x >= 0, z' = 1
eqNatList(z, z') -{ 1 }→ 1 :|: z = 1, ys >= 0, y >= 0, z' = 1 + y + ys
eqNatList[Ite](z, z', z'', z1, z2) -{ 1 + z2 }→ s18 :|: s18 >= 0, s18 <= 2, z = 2, z2 >= 0, z'' >= 0, z' >= 0, z1 >= 0
eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }→ 1 :|: z2 >= 0, z = 1, z'' >= 0, z' >= 0, z1 >= 0
eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }→ 0 :|: z >= 0, z2 >= 0, z' >= 0, z'' >= 0, z1 >= 0
notEmpty(z) -{ 1 }→ 2 :|: z = 1 + x + xs, xs >= 0, x >= 0
notEmpty(z) -{ 1 }→ 1 :|: z = 1
prefix(z, z') -{ 2 }→ s10 :|: s10 >= 0, s10 <= 2, s2 >= 0, s2 <= 2, xs2 >= 0, z = 1 + (1 + x'') + (1 + x3 + xs2), z' - 3 >= 0, x'' >= 0, x3 >= 0
prefix(z, z') -{ 2 }→ s11 :|: s11 >= 0, s11 <= 2, s3 >= 0, s3 <= 2, xs >= 0, z' = 1 + (1 + y') + xs, y' >= 0, z - 3 >= 0
prefix(z, z') -{ 1 }→ s12 :|: s12 >= 0, s12 <= 2, s4 >= 0, s4 <= 2, z = 1 + (1 + x'') + xs', xs >= 0, z' = 1 + (1 + y') + xs, xs' >= 0, y' >= 0, x'' >= 0
prefix(z, z') -{ 2 }→ and(s'', and(s1, prefix(xs'', xs1))) :|: s'' >= 0, s'' <= 2, s1 >= 0, s1 <= 2, z = 1 + (1 + x'') + (1 + x''' + xs''), z' = 1 + (1 + y') + (1 + x2 + xs1), xs'' >= 0, y' >= 0, xs1 >= 0, x''' >= 0, x'' >= 0, x2 >= 0
prefix(z, z') -{ 2 }→ and(2, and(s7, prefix(xs'2, xs7))) :|: s7 >= 0, s7 <= 2, x8 >= 0, x'3 >= 0, z' = 1 + 0 + (1 + x8 + xs7), xs7 >= 0, z = 1 + 0 + (1 + x'3 + xs'2), xs'2 >= 0
prefix(z, z') -{ 2 }→ and(1, and(s5, prefix(xs''', xs3))) :|: s5 >= 0, s5 <= 2, z' = 1 + (1 + y'') + (1 + x4 + xs3), x4 >= 0, x'1 >= 0, z = 1 + 0 + (1 + x'1 + xs'''), y'' >= 0, xs''' >= 0, xs3 >= 0
prefix(z, z') -{ 2 }→ and(1, and(s6, prefix(xs'1, xs5))) :|: s6 >= 0, s6 <= 2, x1 >= 0, z' = 1 + 0 + (1 + x6 + xs5), x'2 >= 0, x6 >= 0, z = 1 + (1 + x1) + (1 + x'2 + xs'1), xs5 >= 0, xs'1 >= 0
prefix(z, z') -{ 2 }→ and(0, and(s8, prefix(xs'3, xs9))) :|: s8 >= 0, s8 <= 2, z = 1 + x' + (1 + x'4 + xs'3), z' = 1 + x + (1 + x10 + xs9), x' >= 0, x >= 0, x'4 >= 0, x10 >= 0, xs9 >= 0, xs'3 >= 0
prefix(z, z') -{ 1 }→ 2 :|: z = 1, z' >= 0
prefix(z, z') -{ 2 }→ 2 :|: z' - 1 >= 0, z = 1 + 0 + 1, 2 = 2
prefix(z, z') -{ 1 }→ 1 :|: z = 1 + x + xs, xs >= 0, x >= 0, z' = 1
prefix(z, z') -{ 2 }→ 1 :|: x5 >= 0, z' - 3 >= 0, xs4 >= 0, z = 1 + 0 + (1 + x5 + xs4), 1 = 1
prefix(z, z') -{ 2 }→ 1 :|: xs >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, z = 1 + 0 + 1, 2 = 2, 1 = 1
prefix(z, z') -{ 2 }→ 1 :|: xs6 >= 0, x1 >= 0, z' = 1 + 0 + 1, z = 1 + (1 + x1) + (1 + x7 + xs6), x7 >= 0, 1 = 1
prefix(z, z') -{ 2 }→ 1 :|: z' - 1 >= 0, z - 3 >= 0, 2 = 2, 1 = 1
prefix(z, z') -{ 2 }→ 1 :|: z = 1 + 0 + (1 + x9 + xs8), z' = 1 + 0 + 1, xs8 >= 0, x9 >= 0, 2 = 2, 1 = 1
prefix(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
prefix(z, z') -{ 2 }→ 0 :|: x5 >= 0, z' - 3 >= 0, xs4 >= 0, z = 1 + 0 + (1 + x5 + xs4), v0 >= 0, v1 >= 0, 1 = v0, 1 = v1
prefix(z, z') -{ 2 }→ 0 :|: xs >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, z = 1 + 0 + 1, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1
prefix(z, z') -{ 1 }→ 0 :|: xs >= 0, z - 1 >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1
prefix(z, z') -{ 2 }→ 0 :|: xs6 >= 0, x1 >= 0, z' = 1 + 0 + 1, z = 1 + (1 + x1) + (1 + x7 + xs6), x7 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 1 = v1
prefix(z, z') -{ 2 }→ 0 :|: z' - 1 >= 0, z - 3 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1
prefix(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, x1 >= 0, z = 1 + (1 + x1) + xs', xs' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1
prefix(z, z') -{ 2 }→ 0 :|: z = 1 + 0 + (1 + x9 + xs8), z' = 1 + 0 + 1, xs8 >= 0, x9 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 1 = v1
prefix(z, z') -{ 2 }→ 0 :|: z' - 1 >= 0, z = 1 + 0 + 1, v0 >= 0, v1 >= 0, 2 = v0, 2 = v1
prefix(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 0 = v1
prefix(z, z') -{ 2 }→ 0 :|: z = 1 + x' + (1 + x11 + xs10), x' >= 0, z' - 2 >= 0, x11 >= 0, xs10 >= 0, v0 >= 0, v1 >= 0, 0 = v0, 1 = v1
prefix(z, z') -{ 2 }→ 0 :|: xs >= 0, z' = 1 + x + xs, z - 2 >= 0, x >= 0, v0 >= 0, v1 >= 0, 0 = v0, 2 = v1
prefix(z, z') -{ 1 }→ 0 :|: xs >= 0, z' = 1 + x + xs, x' >= 0, xs' >= 0, x >= 0, z = 1 + x' + xs', v0 >= 0, v1 >= 0, 0 = v0, 0 = v1
strmatch(z, z') -{ 1 }→ domatch(z, z', 1) :|: z >= 0, z' >= 0

Function symbols to be analyzed: {prefix}, {domatch[Ite],domatch}, {strmatch}
Previous analysis results are:
notEmpty: runtime: O(1) [1], size: O(1) [2]
!EQ: runtime: O(1) [0], size: O(1) [2]
and: runtime: O(1) [0], size: O(1) [2]
eqNatList[Ite]: runtime: O(n1) [1 + z2], size: O(1) [2]
eqNatList: runtime: O(n1) [1 + z], size: O(1) [2]
prefix: runtime: ?, size: O(1) [2]

(43) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed RUNTIME bound using PUBS for: prefix
after applying outer abstraction to obtain an ITS,
resulting in: O(n1) with polynomial bound: 2 + 2·z'

(44) Obligation:

Complexity RNTS consisting of the following rules:

!EQ(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 2, z - 1 >= 0, z' - 1 >= 0
!EQ(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
!EQ(z, z') -{ 0 }→ 1 :|: z' - 1 >= 0, z = 0
!EQ(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
!EQ(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
domatch(z, z', z'') -{ 2 }→ domatch[Ite](and(s9, prefix(xs'4, xs)), 1 + x'5 + xs'4, 1 + x + xs, z'') :|: s9 >= 0, s9 <= 2, xs >= 0, z'' >= 0, z' = 1 + x + xs, x >= 0, z = 1 + x'5 + xs'4, xs'4 >= 0, x'5 >= 0
domatch(z, z', z'') -{ 2 }→ domatch[Ite](2, 1, 1 + x + xs, z'') :|: xs >= 0, z'' >= 0, z' = 1 + x + xs, z = 1, x >= 0
domatch(z, z', z'') -{ 1 }→ domatch[Ite](0, z, 1 + x + xs, z'') :|: z >= 0, xs >= 0, z'' >= 0, z' = 1 + x + xs, x >= 0
domatch(z, z', z'') -{ 1 }→ 1 :|: z = 1 + x + xs, xs >= 0, z'' >= 0, x >= 0, z' = 1
domatch(z, z', z'') -{ 1 }→ 1 + z'' + 1 :|: z'' >= 0, z = 1, z' = 1
domatch[Ite](z, z', z'', z1) -{ 0 }→ domatch(z', xs, 1 + z1 + (1 + 1 + 1)) :|: z' >= 0, xs >= 0, z1 >= 0, z = 1, x >= 0, z'' = 1 + x + xs
domatch[Ite](z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
domatch[Ite](z, z', z'', z1) -{ 0 }→ 1 + z1 + domatch(z', xs, 1 + z1 + (1 + 1 + 1)) :|: z = 2, z' >= 0, xs >= 0, z1 >= 0, x >= 0, z'' = 1 + x + xs
eqNatList(z, z') -{ 2 + xs }→ s13 :|: s13 >= 0, s13 <= 2, s >= 0, s <= 2, y1 >= 0, xs >= 0, z = 1 + (1 + x12) + xs, ys >= 0, z' = 1 + (1 + y1) + ys, x12 >= 0
eqNatList(z, z') -{ 1 + z }→ s14 :|: s14 >= 0, s14 <= 2, z - 1 >= 0, z' = 1 + (1 + y2) + ys, ys >= 0, y2 >= 0
eqNatList(z, z') -{ 2 + xs }→ s15 :|: s15 >= 0, s15 <= 2, x13 >= 0, xs >= 0, z' - 1 >= 0, z = 1 + (1 + x13) + xs
eqNatList(z, z') -{ 1 + z }→ s16 :|: s16 >= 0, s16 <= 2, z - 1 >= 0, z' - 1 >= 0
eqNatList(z, z') -{ 2 + xs }→ s17 :|: s17 >= 0, s17 <= 2, z = 1 + x + xs, xs >= 0, ys >= 0, x >= 0, y >= 0, z' = 1 + y + ys
eqNatList(z, z') -{ 1 }→ 2 :|: z = 1, z' = 1
eqNatList(z, z') -{ 1 }→ 1 :|: z = 1 + x + xs, xs >= 0, x >= 0, z' = 1
eqNatList(z, z') -{ 1 }→ 1 :|: z = 1, ys >= 0, y >= 0, z' = 1 + y + ys
eqNatList[Ite](z, z', z'', z1, z2) -{ 1 + z2 }→ s18 :|: s18 >= 0, s18 <= 2, z = 2, z2 >= 0, z'' >= 0, z' >= 0, z1 >= 0
eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }→ 1 :|: z2 >= 0, z = 1, z'' >= 0, z' >= 0, z1 >= 0
eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }→ 0 :|: z >= 0, z2 >= 0, z' >= 0, z'' >= 0, z1 >= 0
notEmpty(z) -{ 1 }→ 2 :|: z = 1 + x + xs, xs >= 0, x >= 0
notEmpty(z) -{ 1 }→ 1 :|: z = 1
prefix(z, z') -{ 2 }→ s10 :|: s10 >= 0, s10 <= 2, s2 >= 0, s2 <= 2, xs2 >= 0, z = 1 + (1 + x'') + (1 + x3 + xs2), z' - 3 >= 0, x'' >= 0, x3 >= 0
prefix(z, z') -{ 2 }→ s11 :|: s11 >= 0, s11 <= 2, s3 >= 0, s3 <= 2, xs >= 0, z' = 1 + (1 + y') + xs, y' >= 0, z - 3 >= 0
prefix(z, z') -{ 1 }→ s12 :|: s12 >= 0, s12 <= 2, s4 >= 0, s4 <= 2, z = 1 + (1 + x'') + xs', xs >= 0, z' = 1 + (1 + y') + xs, xs' >= 0, y' >= 0, x'' >= 0
prefix(z, z') -{ 2 }→ and(s'', and(s1, prefix(xs'', xs1))) :|: s'' >= 0, s'' <= 2, s1 >= 0, s1 <= 2, z = 1 + (1 + x'') + (1 + x''' + xs''), z' = 1 + (1 + y') + (1 + x2 + xs1), xs'' >= 0, y' >= 0, xs1 >= 0, x''' >= 0, x'' >= 0, x2 >= 0
prefix(z, z') -{ 2 }→ and(2, and(s7, prefix(xs'2, xs7))) :|: s7 >= 0, s7 <= 2, x8 >= 0, x'3 >= 0, z' = 1 + 0 + (1 + x8 + xs7), xs7 >= 0, z = 1 + 0 + (1 + x'3 + xs'2), xs'2 >= 0
prefix(z, z') -{ 2 }→ and(1, and(s5, prefix(xs''', xs3))) :|: s5 >= 0, s5 <= 2, z' = 1 + (1 + y'') + (1 + x4 + xs3), x4 >= 0, x'1 >= 0, z = 1 + 0 + (1 + x'1 + xs'''), y'' >= 0, xs''' >= 0, xs3 >= 0
prefix(z, z') -{ 2 }→ and(1, and(s6, prefix(xs'1, xs5))) :|: s6 >= 0, s6 <= 2, x1 >= 0, z' = 1 + 0 + (1 + x6 + xs5), x'2 >= 0, x6 >= 0, z = 1 + (1 + x1) + (1 + x'2 + xs'1), xs5 >= 0, xs'1 >= 0
prefix(z, z') -{ 2 }→ and(0, and(s8, prefix(xs'3, xs9))) :|: s8 >= 0, s8 <= 2, z = 1 + x' + (1 + x'4 + xs'3), z' = 1 + x + (1 + x10 + xs9), x' >= 0, x >= 0, x'4 >= 0, x10 >= 0, xs9 >= 0, xs'3 >= 0
prefix(z, z') -{ 1 }→ 2 :|: z = 1, z' >= 0
prefix(z, z') -{ 2 }→ 2 :|: z' - 1 >= 0, z = 1 + 0 + 1, 2 = 2
prefix(z, z') -{ 1 }→ 1 :|: z = 1 + x + xs, xs >= 0, x >= 0, z' = 1
prefix(z, z') -{ 2 }→ 1 :|: x5 >= 0, z' - 3 >= 0, xs4 >= 0, z = 1 + 0 + (1 + x5 + xs4), 1 = 1
prefix(z, z') -{ 2 }→ 1 :|: xs >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, z = 1 + 0 + 1, 2 = 2, 1 = 1
prefix(z, z') -{ 2 }→ 1 :|: xs6 >= 0, x1 >= 0, z' = 1 + 0 + 1, z = 1 + (1 + x1) + (1 + x7 + xs6), x7 >= 0, 1 = 1
prefix(z, z') -{ 2 }→ 1 :|: z' - 1 >= 0, z - 3 >= 0, 2 = 2, 1 = 1
prefix(z, z') -{ 2 }→ 1 :|: z = 1 + 0 + (1 + x9 + xs8), z' = 1 + 0 + 1, xs8 >= 0, x9 >= 0, 2 = 2, 1 = 1
prefix(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
prefix(z, z') -{ 2 }→ 0 :|: x5 >= 0, z' - 3 >= 0, xs4 >= 0, z = 1 + 0 + (1 + x5 + xs4), v0 >= 0, v1 >= 0, 1 = v0, 1 = v1
prefix(z, z') -{ 2 }→ 0 :|: xs >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, z = 1 + 0 + 1, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1
prefix(z, z') -{ 1 }→ 0 :|: xs >= 0, z - 1 >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1
prefix(z, z') -{ 2 }→ 0 :|: xs6 >= 0, x1 >= 0, z' = 1 + 0 + 1, z = 1 + (1 + x1) + (1 + x7 + xs6), x7 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 1 = v1
prefix(z, z') -{ 2 }→ 0 :|: z' - 1 >= 0, z - 3 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1
prefix(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, x1 >= 0, z = 1 + (1 + x1) + xs', xs' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1
prefix(z, z') -{ 2 }→ 0 :|: z = 1 + 0 + (1 + x9 + xs8), z' = 1 + 0 + 1, xs8 >= 0, x9 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 1 = v1
prefix(z, z') -{ 2 }→ 0 :|: z' - 1 >= 0, z = 1 + 0 + 1, v0 >= 0, v1 >= 0, 2 = v0, 2 = v1
prefix(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 0 = v1
prefix(z, z') -{ 2 }→ 0 :|: z = 1 + x' + (1 + x11 + xs10), x' >= 0, z' - 2 >= 0, x11 >= 0, xs10 >= 0, v0 >= 0, v1 >= 0, 0 = v0, 1 = v1
prefix(z, z') -{ 2 }→ 0 :|: xs >= 0, z' = 1 + x + xs, z - 2 >= 0, x >= 0, v0 >= 0, v1 >= 0, 0 = v0, 2 = v1
prefix(z, z') -{ 1 }→ 0 :|: xs >= 0, z' = 1 + x + xs, x' >= 0, xs' >= 0, x >= 0, z = 1 + x' + xs', v0 >= 0, v1 >= 0, 0 = v0, 0 = v1
strmatch(z, z') -{ 1 }→ domatch(z, z', 1) :|: z >= 0, z' >= 0

Function symbols to be analyzed: {domatch[Ite],domatch}, {strmatch}
Previous analysis results are:
notEmpty: runtime: O(1) [1], size: O(1) [2]
!EQ: runtime: O(1) [0], size: O(1) [2]
and: runtime: O(1) [0], size: O(1) [2]
eqNatList[Ite]: runtime: O(n1) [1 + z2], size: O(1) [2]
eqNatList: runtime: O(n1) [1 + z], size: O(1) [2]
prefix: runtime: O(n1) [2 + 2·z'], size: O(1) [2]

(45) ResultPropagationProof (UPPER BOUND(ID) transformation)

Applied inner abstraction using the recently inferred runtime/size bounds where possible.

(46) Obligation:

Complexity RNTS consisting of the following rules:

!EQ(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 2, z - 1 >= 0, z' - 1 >= 0
!EQ(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
!EQ(z, z') -{ 0 }→ 1 :|: z' - 1 >= 0, z = 0
!EQ(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
!EQ(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
domatch(z, z', z'') -{ 4 + 2·xs }→ domatch[Ite](s35, 1 + x'5 + xs'4, 1 + x + xs, z'') :|: s34 >= 0, s34 <= 2, s35 >= 0, s35 <= 2, s9 >= 0, s9 <= 2, xs >= 0, z'' >= 0, z' = 1 + x + xs, x >= 0, z = 1 + x'5 + xs'4, xs'4 >= 0, x'5 >= 0
domatch(z, z', z'') -{ 2 }→ domatch[Ite](2, 1, 1 + x + xs, z'') :|: xs >= 0, z'' >= 0, z' = 1 + x + xs, z = 1, x >= 0
domatch(z, z', z'') -{ 1 }→ domatch[Ite](0, z, 1 + x + xs, z'') :|: z >= 0, xs >= 0, z'' >= 0, z' = 1 + x + xs, x >= 0
domatch(z, z', z'') -{ 1 }→ 1 :|: z = 1 + x + xs, xs >= 0, z'' >= 0, x >= 0, z' = 1
domatch(z, z', z'') -{ 1 }→ 1 + z'' + 1 :|: z'' >= 0, z = 1, z' = 1
domatch[Ite](z, z', z'', z1) -{ 0 }→ domatch(z', xs, 1 + z1 + (1 + 1 + 1)) :|: z' >= 0, xs >= 0, z1 >= 0, z = 1, x >= 0, z'' = 1 + x + xs
domatch[Ite](z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
domatch[Ite](z, z', z'', z1) -{ 0 }→ 1 + z1 + domatch(z', xs, 1 + z1 + (1 + 1 + 1)) :|: z = 2, z' >= 0, xs >= 0, z1 >= 0, x >= 0, z'' = 1 + x + xs
eqNatList(z, z') -{ 2 + xs }→ s13 :|: s13 >= 0, s13 <= 2, s >= 0, s <= 2, y1 >= 0, xs >= 0, z = 1 + (1 + x12) + xs, ys >= 0, z' = 1 + (1 + y1) + ys, x12 >= 0
eqNatList(z, z') -{ 1 + z }→ s14 :|: s14 >= 0, s14 <= 2, z - 1 >= 0, z' = 1 + (1 + y2) + ys, ys >= 0, y2 >= 0
eqNatList(z, z') -{ 2 + xs }→ s15 :|: s15 >= 0, s15 <= 2, x13 >= 0, xs >= 0, z' - 1 >= 0, z = 1 + (1 + x13) + xs
eqNatList(z, z') -{ 1 + z }→ s16 :|: s16 >= 0, s16 <= 2, z - 1 >= 0, z' - 1 >= 0
eqNatList(z, z') -{ 2 + xs }→ s17 :|: s17 >= 0, s17 <= 2, z = 1 + x + xs, xs >= 0, ys >= 0, x >= 0, y >= 0, z' = 1 + y + ys
eqNatList(z, z') -{ 1 }→ 2 :|: z = 1, z' = 1
eqNatList(z, z') -{ 1 }→ 1 :|: z = 1 + x + xs, xs >= 0, x >= 0, z' = 1
eqNatList(z, z') -{ 1 }→ 1 :|: z = 1, ys >= 0, y >= 0, z' = 1 + y + ys
eqNatList[Ite](z, z', z'', z1, z2) -{ 1 + z2 }→ s18 :|: s18 >= 0, s18 <= 2, z = 2, z2 >= 0, z'' >= 0, z' >= 0, z1 >= 0
eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }→ 1 :|: z2 >= 0, z = 1, z'' >= 0, z' >= 0, z1 >= 0
eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }→ 0 :|: z >= 0, z2 >= 0, z' >= 0, z'' >= 0, z1 >= 0
notEmpty(z) -{ 1 }→ 2 :|: z = 1 + x + xs, xs >= 0, x >= 0
notEmpty(z) -{ 1 }→ 1 :|: z = 1
prefix(z, z') -{ 2 }→ s10 :|: s10 >= 0, s10 <= 2, s2 >= 0, s2 <= 2, xs2 >= 0, z = 1 + (1 + x'') + (1 + x3 + xs2), z' - 3 >= 0, x'' >= 0, x3 >= 0
prefix(z, z') -{ 2 }→ s11 :|: s11 >= 0, s11 <= 2, s3 >= 0, s3 <= 2, xs >= 0, z' = 1 + (1 + y') + xs, y' >= 0, z - 3 >= 0
prefix(z, z') -{ 1 }→ s12 :|: s12 >= 0, s12 <= 2, s4 >= 0, s4 <= 2, z = 1 + (1 + x'') + xs', xs >= 0, z' = 1 + (1 + y') + xs, xs' >= 0, y' >= 0, x'' >= 0
prefix(z, z') -{ 4 + 2·xs1 }→ s21 :|: s19 >= 0, s19 <= 2, s20 >= 0, s20 <= 2, s21 >= 0, s21 <= 2, s'' >= 0, s'' <= 2, s1 >= 0, s1 <= 2, z = 1 + (1 + x'') + (1 + x''' + xs''), z' = 1 + (1 + y') + (1 + x2 + xs1), xs'' >= 0, y' >= 0, xs1 >= 0, x''' >= 0, x'' >= 0, x2 >= 0
prefix(z, z') -{ 4 + 2·xs3 }→ s24 :|: s22 >= 0, s22 <= 2, s23 >= 0, s23 <= 2, s24 >= 0, s24 <= 2, s5 >= 0, s5 <= 2, z' = 1 + (1 + y'') + (1 + x4 + xs3), x4 >= 0, x'1 >= 0, z = 1 + 0 + (1 + x'1 + xs'''), y'' >= 0, xs''' >= 0, xs3 >= 0
prefix(z, z') -{ 4 + 2·xs5 }→ s27 :|: s25 >= 0, s25 <= 2, s26 >= 0, s26 <= 2, s27 >= 0, s27 <= 2, s6 >= 0, s6 <= 2, x1 >= 0, z' = 1 + 0 + (1 + x6 + xs5), x'2 >= 0, x6 >= 0, z = 1 + (1 + x1) + (1 + x'2 + xs'1), xs5 >= 0, xs'1 >= 0
prefix(z, z') -{ 4 + 2·xs7 }→ s30 :|: s28 >= 0, s28 <= 2, s29 >= 0, s29 <= 2, s30 >= 0, s30 <= 2, s7 >= 0, s7 <= 2, x8 >= 0, x'3 >= 0, z' = 1 + 0 + (1 + x8 + xs7), xs7 >= 0, z = 1 + 0 + (1 + x'3 + xs'2), xs'2 >= 0
prefix(z, z') -{ 4 + 2·xs9 }→ s33 :|: s31 >= 0, s31 <= 2, s32 >= 0, s32 <= 2, s33 >= 0, s33 <= 2, s8 >= 0, s8 <= 2, z = 1 + x' + (1 + x'4 + xs'3), z' = 1 + x + (1 + x10 + xs9), x' >= 0, x >= 0, x'4 >= 0, x10 >= 0, xs9 >= 0, xs'3 >= 0
prefix(z, z') -{ 1 }→ 2 :|: z = 1, z' >= 0
prefix(z, z') -{ 2 }→ 2 :|: z' - 1 >= 0, z = 1 + 0 + 1, 2 = 2
prefix(z, z') -{ 1 }→ 1 :|: z = 1 + x + xs, xs >= 0, x >= 0, z' = 1
prefix(z, z') -{ 2 }→ 1 :|: x5 >= 0, z' - 3 >= 0, xs4 >= 0, z = 1 + 0 + (1 + x5 + xs4), 1 = 1
prefix(z, z') -{ 2 }→ 1 :|: xs >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, z = 1 + 0 + 1, 2 = 2, 1 = 1
prefix(z, z') -{ 2 }→ 1 :|: xs6 >= 0, x1 >= 0, z' = 1 + 0 + 1, z = 1 + (1 + x1) + (1 + x7 + xs6), x7 >= 0, 1 = 1
prefix(z, z') -{ 2 }→ 1 :|: z' - 1 >= 0, z - 3 >= 0, 2 = 2, 1 = 1
prefix(z, z') -{ 2 }→ 1 :|: z = 1 + 0 + (1 + x9 + xs8), z' = 1 + 0 + 1, xs8 >= 0, x9 >= 0, 2 = 2, 1 = 1
prefix(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
prefix(z, z') -{ 2 }→ 0 :|: x5 >= 0, z' - 3 >= 0, xs4 >= 0, z = 1 + 0 + (1 + x5 + xs4), v0 >= 0, v1 >= 0, 1 = v0, 1 = v1
prefix(z, z') -{ 2 }→ 0 :|: xs >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, z = 1 + 0 + 1, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1
prefix(z, z') -{ 1 }→ 0 :|: xs >= 0, z - 1 >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1
prefix(z, z') -{ 2 }→ 0 :|: xs6 >= 0, x1 >= 0, z' = 1 + 0 + 1, z = 1 + (1 + x1) + (1 + x7 + xs6), x7 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 1 = v1
prefix(z, z') -{ 2 }→ 0 :|: z' - 1 >= 0, z - 3 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1
prefix(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, x1 >= 0, z = 1 + (1 + x1) + xs', xs' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1
prefix(z, z') -{ 2 }→ 0 :|: z = 1 + 0 + (1 + x9 + xs8), z' = 1 + 0 + 1, xs8 >= 0, x9 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 1 = v1
prefix(z, z') -{ 2 }→ 0 :|: z' - 1 >= 0, z = 1 + 0 + 1, v0 >= 0, v1 >= 0, 2 = v0, 2 = v1
prefix(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 0 = v1
prefix(z, z') -{ 2 }→ 0 :|: z = 1 + x' + (1 + x11 + xs10), x' >= 0, z' - 2 >= 0, x11 >= 0, xs10 >= 0, v0 >= 0, v1 >= 0, 0 = v0, 1 = v1
prefix(z, z') -{ 2 }→ 0 :|: xs >= 0, z' = 1 + x + xs, z - 2 >= 0, x >= 0, v0 >= 0, v1 >= 0, 0 = v0, 2 = v1
prefix(z, z') -{ 1 }→ 0 :|: xs >= 0, z' = 1 + x + xs, x' >= 0, xs' >= 0, x >= 0, z = 1 + x' + xs', v0 >= 0, v1 >= 0, 0 = v0, 0 = v1
strmatch(z, z') -{ 1 }→ domatch(z, z', 1) :|: z >= 0, z' >= 0

Function symbols to be analyzed: {domatch[Ite],domatch}, {strmatch}
Previous analysis results are:
notEmpty: runtime: O(1) [1], size: O(1) [2]
!EQ: runtime: O(1) [0], size: O(1) [2]
and: runtime: O(1) [0], size: O(1) [2]
eqNatList[Ite]: runtime: O(n1) [1 + z2], size: O(1) [2]
eqNatList: runtime: O(n1) [1 + z], size: O(1) [2]
prefix: runtime: O(n1) [2 + 2·z'], size: O(1) [2]

(47) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed SIZE bound using CoFloCo for: domatch[Ite]
after applying outer abstraction to obtain an ITS,
resulting in: O(n2) with polynomial bound: 15 + 11·z'' + z''·z1 + 4·z''2 + 3·z1

Computed SIZE bound using PUBS for: domatch
after applying outer abstraction to obtain an ITS,
resulting in: O(n2) with polynomial bound: 84 + 70·z' + 2·z'·z'' + 16·z'2 + 6·z''

(48) Obligation:

Complexity RNTS consisting of the following rules:

!EQ(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 2, z - 1 >= 0, z' - 1 >= 0
!EQ(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
!EQ(z, z') -{ 0 }→ 1 :|: z' - 1 >= 0, z = 0
!EQ(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
!EQ(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
domatch(z, z', z'') -{ 4 + 2·xs }→ domatch[Ite](s35, 1 + x'5 + xs'4, 1 + x + xs, z'') :|: s34 >= 0, s34 <= 2, s35 >= 0, s35 <= 2, s9 >= 0, s9 <= 2, xs >= 0, z'' >= 0, z' = 1 + x + xs, x >= 0, z = 1 + x'5 + xs'4, xs'4 >= 0, x'5 >= 0
domatch(z, z', z'') -{ 2 }→ domatch[Ite](2, 1, 1 + x + xs, z'') :|: xs >= 0, z'' >= 0, z' = 1 + x + xs, z = 1, x >= 0
domatch(z, z', z'') -{ 1 }→ domatch[Ite](0, z, 1 + x + xs, z'') :|: z >= 0, xs >= 0, z'' >= 0, z' = 1 + x + xs, x >= 0
domatch(z, z', z'') -{ 1 }→ 1 :|: z = 1 + x + xs, xs >= 0, z'' >= 0, x >= 0, z' = 1
domatch(z, z', z'') -{ 1 }→ 1 + z'' + 1 :|: z'' >= 0, z = 1, z' = 1
domatch[Ite](z, z', z'', z1) -{ 0 }→ domatch(z', xs, 1 + z1 + (1 + 1 + 1)) :|: z' >= 0, xs >= 0, z1 >= 0, z = 1, x >= 0, z'' = 1 + x + xs
domatch[Ite](z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
domatch[Ite](z, z', z'', z1) -{ 0 }→ 1 + z1 + domatch(z', xs, 1 + z1 + (1 + 1 + 1)) :|: z = 2, z' >= 0, xs >= 0, z1 >= 0, x >= 0, z'' = 1 + x + xs
eqNatList(z, z') -{ 2 + xs }→ s13 :|: s13 >= 0, s13 <= 2, s >= 0, s <= 2, y1 >= 0, xs >= 0, z = 1 + (1 + x12) + xs, ys >= 0, z' = 1 + (1 + y1) + ys, x12 >= 0
eqNatList(z, z') -{ 1 + z }→ s14 :|: s14 >= 0, s14 <= 2, z - 1 >= 0, z' = 1 + (1 + y2) + ys, ys >= 0, y2 >= 0
eqNatList(z, z') -{ 2 + xs }→ s15 :|: s15 >= 0, s15 <= 2, x13 >= 0, xs >= 0, z' - 1 >= 0, z = 1 + (1 + x13) + xs
eqNatList(z, z') -{ 1 + z }→ s16 :|: s16 >= 0, s16 <= 2, z - 1 >= 0, z' - 1 >= 0
eqNatList(z, z') -{ 2 + xs }→ s17 :|: s17 >= 0, s17 <= 2, z = 1 + x + xs, xs >= 0, ys >= 0, x >= 0, y >= 0, z' = 1 + y + ys
eqNatList(z, z') -{ 1 }→ 2 :|: z = 1, z' = 1
eqNatList(z, z') -{ 1 }→ 1 :|: z = 1 + x + xs, xs >= 0, x >= 0, z' = 1
eqNatList(z, z') -{ 1 }→ 1 :|: z = 1, ys >= 0, y >= 0, z' = 1 + y + ys
eqNatList[Ite](z, z', z'', z1, z2) -{ 1 + z2 }→ s18 :|: s18 >= 0, s18 <= 2, z = 2, z2 >= 0, z'' >= 0, z' >= 0, z1 >= 0
eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }→ 1 :|: z2 >= 0, z = 1, z'' >= 0, z' >= 0, z1 >= 0
eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }→ 0 :|: z >= 0, z2 >= 0, z' >= 0, z'' >= 0, z1 >= 0
notEmpty(z) -{ 1 }→ 2 :|: z = 1 + x + xs, xs >= 0, x >= 0
notEmpty(z) -{ 1 }→ 1 :|: z = 1
prefix(z, z') -{ 2 }→ s10 :|: s10 >= 0, s10 <= 2, s2 >= 0, s2 <= 2, xs2 >= 0, z = 1 + (1 + x'') + (1 + x3 + xs2), z' - 3 >= 0, x'' >= 0, x3 >= 0
prefix(z, z') -{ 2 }→ s11 :|: s11 >= 0, s11 <= 2, s3 >= 0, s3 <= 2, xs >= 0, z' = 1 + (1 + y') + xs, y' >= 0, z - 3 >= 0
prefix(z, z') -{ 1 }→ s12 :|: s12 >= 0, s12 <= 2, s4 >= 0, s4 <= 2, z = 1 + (1 + x'') + xs', xs >= 0, z' = 1 + (1 + y') + xs, xs' >= 0, y' >= 0, x'' >= 0
prefix(z, z') -{ 4 + 2·xs1 }→ s21 :|: s19 >= 0, s19 <= 2, s20 >= 0, s20 <= 2, s21 >= 0, s21 <= 2, s'' >= 0, s'' <= 2, s1 >= 0, s1 <= 2, z = 1 + (1 + x'') + (1 + x''' + xs''), z' = 1 + (1 + y') + (1 + x2 + xs1), xs'' >= 0, y' >= 0, xs1 >= 0, x''' >= 0, x'' >= 0, x2 >= 0
prefix(z, z') -{ 4 + 2·xs3 }→ s24 :|: s22 >= 0, s22 <= 2, s23 >= 0, s23 <= 2, s24 >= 0, s24 <= 2, s5 >= 0, s5 <= 2, z' = 1 + (1 + y'') + (1 + x4 + xs3), x4 >= 0, x'1 >= 0, z = 1 + 0 + (1 + x'1 + xs'''), y'' >= 0, xs''' >= 0, xs3 >= 0
prefix(z, z') -{ 4 + 2·xs5 }→ s27 :|: s25 >= 0, s25 <= 2, s26 >= 0, s26 <= 2, s27 >= 0, s27 <= 2, s6 >= 0, s6 <= 2, x1 >= 0, z' = 1 + 0 + (1 + x6 + xs5), x'2 >= 0, x6 >= 0, z = 1 + (1 + x1) + (1 + x'2 + xs'1), xs5 >= 0, xs'1 >= 0
prefix(z, z') -{ 4 + 2·xs7 }→ s30 :|: s28 >= 0, s28 <= 2, s29 >= 0, s29 <= 2, s30 >= 0, s30 <= 2, s7 >= 0, s7 <= 2, x8 >= 0, x'3 >= 0, z' = 1 + 0 + (1 + x8 + xs7), xs7 >= 0, z = 1 + 0 + (1 + x'3 + xs'2), xs'2 >= 0
prefix(z, z') -{ 4 + 2·xs9 }→ s33 :|: s31 >= 0, s31 <= 2, s32 >= 0, s32 <= 2, s33 >= 0, s33 <= 2, s8 >= 0, s8 <= 2, z = 1 + x' + (1 + x'4 + xs'3), z' = 1 + x + (1 + x10 + xs9), x' >= 0, x >= 0, x'4 >= 0, x10 >= 0, xs9 >= 0, xs'3 >= 0
prefix(z, z') -{ 1 }→ 2 :|: z = 1, z' >= 0
prefix(z, z') -{ 2 }→ 2 :|: z' - 1 >= 0, z = 1 + 0 + 1, 2 = 2
prefix(z, z') -{ 1 }→ 1 :|: z = 1 + x + xs, xs >= 0, x >= 0, z' = 1
prefix(z, z') -{ 2 }→ 1 :|: x5 >= 0, z' - 3 >= 0, xs4 >= 0, z = 1 + 0 + (1 + x5 + xs4), 1 = 1
prefix(z, z') -{ 2 }→ 1 :|: xs >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, z = 1 + 0 + 1, 2 = 2, 1 = 1
prefix(z, z') -{ 2 }→ 1 :|: xs6 >= 0, x1 >= 0, z' = 1 + 0 + 1, z = 1 + (1 + x1) + (1 + x7 + xs6), x7 >= 0, 1 = 1
prefix(z, z') -{ 2 }→ 1 :|: z' - 1 >= 0, z - 3 >= 0, 2 = 2, 1 = 1
prefix(z, z') -{ 2 }→ 1 :|: z = 1 + 0 + (1 + x9 + xs8), z' = 1 + 0 + 1, xs8 >= 0, x9 >= 0, 2 = 2, 1 = 1
prefix(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
prefix(z, z') -{ 2 }→ 0 :|: x5 >= 0, z' - 3 >= 0, xs4 >= 0, z = 1 + 0 + (1 + x5 + xs4), v0 >= 0, v1 >= 0, 1 = v0, 1 = v1
prefix(z, z') -{ 2 }→ 0 :|: xs >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, z = 1 + 0 + 1, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1
prefix(z, z') -{ 1 }→ 0 :|: xs >= 0, z - 1 >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1
prefix(z, z') -{ 2 }→ 0 :|: xs6 >= 0, x1 >= 0, z' = 1 + 0 + 1, z = 1 + (1 + x1) + (1 + x7 + xs6), x7 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 1 = v1
prefix(z, z') -{ 2 }→ 0 :|: z' - 1 >= 0, z - 3 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1
prefix(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, x1 >= 0, z = 1 + (1 + x1) + xs', xs' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1
prefix(z, z') -{ 2 }→ 0 :|: z = 1 + 0 + (1 + x9 + xs8), z' = 1 + 0 + 1, xs8 >= 0, x9 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 1 = v1
prefix(z, z') -{ 2 }→ 0 :|: z' - 1 >= 0, z = 1 + 0 + 1, v0 >= 0, v1 >= 0, 2 = v0, 2 = v1
prefix(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 0 = v1
prefix(z, z') -{ 2 }→ 0 :|: z = 1 + x' + (1 + x11 + xs10), x' >= 0, z' - 2 >= 0, x11 >= 0, xs10 >= 0, v0 >= 0, v1 >= 0, 0 = v0, 1 = v1
prefix(z, z') -{ 2 }→ 0 :|: xs >= 0, z' = 1 + x + xs, z - 2 >= 0, x >= 0, v0 >= 0, v1 >= 0, 0 = v0, 2 = v1
prefix(z, z') -{ 1 }→ 0 :|: xs >= 0, z' = 1 + x + xs, x' >= 0, xs' >= 0, x >= 0, z = 1 + x' + xs', v0 >= 0, v1 >= 0, 0 = v0, 0 = v1
strmatch(z, z') -{ 1 }→ domatch(z, z', 1) :|: z >= 0, z' >= 0

Function symbols to be analyzed: {domatch[Ite],domatch}, {strmatch}
Previous analysis results are:
notEmpty: runtime: O(1) [1], size: O(1) [2]
!EQ: runtime: O(1) [0], size: O(1) [2]
and: runtime: O(1) [0], size: O(1) [2]
eqNatList[Ite]: runtime: O(n1) [1 + z2], size: O(1) [2]
eqNatList: runtime: O(n1) [1 + z], size: O(1) [2]
prefix: runtime: O(n1) [2 + 2·z'], size: O(1) [2]
domatch[Ite]: runtime: ?, size: O(n2) [15 + 11·z'' + z''·z1 + 4·z''2 + 3·z1]
domatch: runtime: ?, size: O(n2) [84 + 70·z' + 2·z'·z'' + 16·z'2 + 6·z'']

(49) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed RUNTIME bound using CoFloCo for: domatch[Ite]
after applying outer abstraction to obtain an ITS,
resulting in: O(n2) with polynomial bound: 5 + 4·z'' + 2·z''2

Computed RUNTIME bound using PUBS for: domatch
after applying outer abstraction to obtain an ITS,
resulting in: O(n2) with polynomial bound: 41 + 34·z' + 8·z'2

(50) Obligation:

Complexity RNTS consisting of the following rules:

!EQ(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 2, z - 1 >= 0, z' - 1 >= 0
!EQ(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
!EQ(z, z') -{ 0 }→ 1 :|: z' - 1 >= 0, z = 0
!EQ(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
!EQ(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
domatch(z, z', z'') -{ 4 + 2·xs }→ domatch[Ite](s35, 1 + x'5 + xs'4, 1 + x + xs, z'') :|: s34 >= 0, s34 <= 2, s35 >= 0, s35 <= 2, s9 >= 0, s9 <= 2, xs >= 0, z'' >= 0, z' = 1 + x + xs, x >= 0, z = 1 + x'5 + xs'4, xs'4 >= 0, x'5 >= 0
domatch(z, z', z'') -{ 2 }→ domatch[Ite](2, 1, 1 + x + xs, z'') :|: xs >= 0, z'' >= 0, z' = 1 + x + xs, z = 1, x >= 0
domatch(z, z', z'') -{ 1 }→ domatch[Ite](0, z, 1 + x + xs, z'') :|: z >= 0, xs >= 0, z'' >= 0, z' = 1 + x + xs, x >= 0
domatch(z, z', z'') -{ 1 }→ 1 :|: z = 1 + x + xs, xs >= 0, z'' >= 0, x >= 0, z' = 1
domatch(z, z', z'') -{ 1 }→ 1 + z'' + 1 :|: z'' >= 0, z = 1, z' = 1
domatch[Ite](z, z', z'', z1) -{ 0 }→ domatch(z', xs, 1 + z1 + (1 + 1 + 1)) :|: z' >= 0, xs >= 0, z1 >= 0, z = 1, x >= 0, z'' = 1 + x + xs
domatch[Ite](z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
domatch[Ite](z, z', z'', z1) -{ 0 }→ 1 + z1 + domatch(z', xs, 1 + z1 + (1 + 1 + 1)) :|: z = 2, z' >= 0, xs >= 0, z1 >= 0, x >= 0, z'' = 1 + x + xs
eqNatList(z, z') -{ 2 + xs }→ s13 :|: s13 >= 0, s13 <= 2, s >= 0, s <= 2, y1 >= 0, xs >= 0, z = 1 + (1 + x12) + xs, ys >= 0, z' = 1 + (1 + y1) + ys, x12 >= 0
eqNatList(z, z') -{ 1 + z }→ s14 :|: s14 >= 0, s14 <= 2, z - 1 >= 0, z' = 1 + (1 + y2) + ys, ys >= 0, y2 >= 0
eqNatList(z, z') -{ 2 + xs }→ s15 :|: s15 >= 0, s15 <= 2, x13 >= 0, xs >= 0, z' - 1 >= 0, z = 1 + (1 + x13) + xs
eqNatList(z, z') -{ 1 + z }→ s16 :|: s16 >= 0, s16 <= 2, z - 1 >= 0, z' - 1 >= 0
eqNatList(z, z') -{ 2 + xs }→ s17 :|: s17 >= 0, s17 <= 2, z = 1 + x + xs, xs >= 0, ys >= 0, x >= 0, y >= 0, z' = 1 + y + ys
eqNatList(z, z') -{ 1 }→ 2 :|: z = 1, z' = 1
eqNatList(z, z') -{ 1 }→ 1 :|: z = 1 + x + xs, xs >= 0, x >= 0, z' = 1
eqNatList(z, z') -{ 1 }→ 1 :|: z = 1, ys >= 0, y >= 0, z' = 1 + y + ys
eqNatList[Ite](z, z', z'', z1, z2) -{ 1 + z2 }→ s18 :|: s18 >= 0, s18 <= 2, z = 2, z2 >= 0, z'' >= 0, z' >= 0, z1 >= 0
eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }→ 1 :|: z2 >= 0, z = 1, z'' >= 0, z' >= 0, z1 >= 0
eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }→ 0 :|: z >= 0, z2 >= 0, z' >= 0, z'' >= 0, z1 >= 0
notEmpty(z) -{ 1 }→ 2 :|: z = 1 + x + xs, xs >= 0, x >= 0
notEmpty(z) -{ 1 }→ 1 :|: z = 1
prefix(z, z') -{ 2 }→ s10 :|: s10 >= 0, s10 <= 2, s2 >= 0, s2 <= 2, xs2 >= 0, z = 1 + (1 + x'') + (1 + x3 + xs2), z' - 3 >= 0, x'' >= 0, x3 >= 0
prefix(z, z') -{ 2 }→ s11 :|: s11 >= 0, s11 <= 2, s3 >= 0, s3 <= 2, xs >= 0, z' = 1 + (1 + y') + xs, y' >= 0, z - 3 >= 0
prefix(z, z') -{ 1 }→ s12 :|: s12 >= 0, s12 <= 2, s4 >= 0, s4 <= 2, z = 1 + (1 + x'') + xs', xs >= 0, z' = 1 + (1 + y') + xs, xs' >= 0, y' >= 0, x'' >= 0
prefix(z, z') -{ 4 + 2·xs1 }→ s21 :|: s19 >= 0, s19 <= 2, s20 >= 0, s20 <= 2, s21 >= 0, s21 <= 2, s'' >= 0, s'' <= 2, s1 >= 0, s1 <= 2, z = 1 + (1 + x'') + (1 + x''' + xs''), z' = 1 + (1 + y') + (1 + x2 + xs1), xs'' >= 0, y' >= 0, xs1 >= 0, x''' >= 0, x'' >= 0, x2 >= 0
prefix(z, z') -{ 4 + 2·xs3 }→ s24 :|: s22 >= 0, s22 <= 2, s23 >= 0, s23 <= 2, s24 >= 0, s24 <= 2, s5 >= 0, s5 <= 2, z' = 1 + (1 + y'') + (1 + x4 + xs3), x4 >= 0, x'1 >= 0, z = 1 + 0 + (1 + x'1 + xs'''), y'' >= 0, xs''' >= 0, xs3 >= 0
prefix(z, z') -{ 4 + 2·xs5 }→ s27 :|: s25 >= 0, s25 <= 2, s26 >= 0, s26 <= 2, s27 >= 0, s27 <= 2, s6 >= 0, s6 <= 2, x1 >= 0, z' = 1 + 0 + (1 + x6 + xs5), x'2 >= 0, x6 >= 0, z = 1 + (1 + x1) + (1 + x'2 + xs'1), xs5 >= 0, xs'1 >= 0
prefix(z, z') -{ 4 + 2·xs7 }→ s30 :|: s28 >= 0, s28 <= 2, s29 >= 0, s29 <= 2, s30 >= 0, s30 <= 2, s7 >= 0, s7 <= 2, x8 >= 0, x'3 >= 0, z' = 1 + 0 + (1 + x8 + xs7), xs7 >= 0, z = 1 + 0 + (1 + x'3 + xs'2), xs'2 >= 0
prefix(z, z') -{ 4 + 2·xs9 }→ s33 :|: s31 >= 0, s31 <= 2, s32 >= 0, s32 <= 2, s33 >= 0, s33 <= 2, s8 >= 0, s8 <= 2, z = 1 + x' + (1 + x'4 + xs'3), z' = 1 + x + (1 + x10 + xs9), x' >= 0, x >= 0, x'4 >= 0, x10 >= 0, xs9 >= 0, xs'3 >= 0
prefix(z, z') -{ 1 }→ 2 :|: z = 1, z' >= 0
prefix(z, z') -{ 2 }→ 2 :|: z' - 1 >= 0, z = 1 + 0 + 1, 2 = 2
prefix(z, z') -{ 1 }→ 1 :|: z = 1 + x + xs, xs >= 0, x >= 0, z' = 1
prefix(z, z') -{ 2 }→ 1 :|: x5 >= 0, z' - 3 >= 0, xs4 >= 0, z = 1 + 0 + (1 + x5 + xs4), 1 = 1
prefix(z, z') -{ 2 }→ 1 :|: xs >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, z = 1 + 0 + 1, 2 = 2, 1 = 1
prefix(z, z') -{ 2 }→ 1 :|: xs6 >= 0, x1 >= 0, z' = 1 + 0 + 1, z = 1 + (1 + x1) + (1 + x7 + xs6), x7 >= 0, 1 = 1
prefix(z, z') -{ 2 }→ 1 :|: z' - 1 >= 0, z - 3 >= 0, 2 = 2, 1 = 1
prefix(z, z') -{ 2 }→ 1 :|: z = 1 + 0 + (1 + x9 + xs8), z' = 1 + 0 + 1, xs8 >= 0, x9 >= 0, 2 = 2, 1 = 1
prefix(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
prefix(z, z') -{ 2 }→ 0 :|: x5 >= 0, z' - 3 >= 0, xs4 >= 0, z = 1 + 0 + (1 + x5 + xs4), v0 >= 0, v1 >= 0, 1 = v0, 1 = v1
prefix(z, z') -{ 2 }→ 0 :|: xs >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, z = 1 + 0 + 1, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1
prefix(z, z') -{ 1 }→ 0 :|: xs >= 0, z - 1 >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1
prefix(z, z') -{ 2 }→ 0 :|: xs6 >= 0, x1 >= 0, z' = 1 + 0 + 1, z = 1 + (1 + x1) + (1 + x7 + xs6), x7 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 1 = v1
prefix(z, z') -{ 2 }→ 0 :|: z' - 1 >= 0, z - 3 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1
prefix(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, x1 >= 0, z = 1 + (1 + x1) + xs', xs' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1
prefix(z, z') -{ 2 }→ 0 :|: z = 1 + 0 + (1 + x9 + xs8), z' = 1 + 0 + 1, xs8 >= 0, x9 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 1 = v1
prefix(z, z') -{ 2 }→ 0 :|: z' - 1 >= 0, z = 1 + 0 + 1, v0 >= 0, v1 >= 0, 2 = v0, 2 = v1
prefix(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 0 = v1
prefix(z, z') -{ 2 }→ 0 :|: z = 1 + x' + (1 + x11 + xs10), x' >= 0, z' - 2 >= 0, x11 >= 0, xs10 >= 0, v0 >= 0, v1 >= 0, 0 = v0, 1 = v1
prefix(z, z') -{ 2 }→ 0 :|: xs >= 0, z' = 1 + x + xs, z - 2 >= 0, x >= 0, v0 >= 0, v1 >= 0, 0 = v0, 2 = v1
prefix(z, z') -{ 1 }→ 0 :|: xs >= 0, z' = 1 + x + xs, x' >= 0, xs' >= 0, x >= 0, z = 1 + x' + xs', v0 >= 0, v1 >= 0, 0 = v0, 0 = v1
strmatch(z, z') -{ 1 }→ domatch(z, z', 1) :|: z >= 0, z' >= 0

Function symbols to be analyzed: {strmatch}
Previous analysis results are:
notEmpty: runtime: O(1) [1], size: O(1) [2]
!EQ: runtime: O(1) [0], size: O(1) [2]
and: runtime: O(1) [0], size: O(1) [2]
eqNatList[Ite]: runtime: O(n1) [1 + z2], size: O(1) [2]
eqNatList: runtime: O(n1) [1 + z], size: O(1) [2]
prefix: runtime: O(n1) [2 + 2·z'], size: O(1) [2]
domatch[Ite]: runtime: O(n2) [5 + 4·z'' + 2·z''2], size: O(n2) [15 + 11·z'' + z''·z1 + 4·z''2 + 3·z1]
domatch: runtime: O(n2) [41 + 34·z' + 8·z'2], size: O(n2) [84 + 70·z' + 2·z'·z'' + 16·z'2 + 6·z'']

(51) ResultPropagationProof (UPPER BOUND(ID) transformation)

Applied inner abstraction using the recently inferred runtime/size bounds where possible.

(52) Obligation:

Complexity RNTS consisting of the following rules:

!EQ(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 2, z - 1 >= 0, z' - 1 >= 0
!EQ(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
!EQ(z, z') -{ 0 }→ 1 :|: z' - 1 >= 0, z = 0
!EQ(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
!EQ(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
domatch(z, z', z'') -{ 13 + 8·x + 4·x·xs + 2·x2 + 8·xs + 2·xs2 }→ s36 :|: s36 >= 0, s36 <= 3 * z'' + 15 + 4 * ((1 + x + xs) * (1 + x + xs)) + 11 * (1 + x + xs) + 1 * ((1 + x + xs) * z''), xs >= 0, z'' >= 0, z' = 1 + x + xs, z = 1, x >= 0
domatch(z, z', z'') -{ 12 + 8·x + 4·x·xs + 2·x2 + 8·xs + 2·xs2 }→ s37 :|: s37 >= 0, s37 <= 3 * z'' + 15 + 4 * ((1 + x + xs) * (1 + x + xs)) + 11 * (1 + x + xs) + 1 * ((1 + x + xs) * z''), z >= 0, xs >= 0, z'' >= 0, z' = 1 + x + xs, x >= 0
domatch(z, z', z'') -{ 15 + 8·x + 4·x·xs + 2·x2 + 10·xs + 2·xs2 }→ s41 :|: s41 >= 0, s41 <= 3 * z'' + 15 + 4 * ((1 + x + xs) * (1 + x + xs)) + 11 * (1 + x + xs) + 1 * ((1 + x + xs) * z''), s34 >= 0, s34 <= 2, s35 >= 0, s35 <= 2, s9 >= 0, s9 <= 2, xs >= 0, z'' >= 0, z' = 1 + x + xs, x >= 0, z = 1 + x'5 + xs'4, xs'4 >= 0, x'5 >= 0
domatch(z, z', z'') -{ 1 }→ 1 :|: z = 1 + x + xs, xs >= 0, z'' >= 0, x >= 0, z' = 1
domatch(z, z', z'') -{ 1 }→ 1 + z'' + 1 :|: z'' >= 0, z = 1, z' = 1
domatch[Ite](z, z', z'', z1) -{ 41 + 34·xs + 8·xs2 }→ s39 :|: s39 >= 0, s39 <= 84 + 6 * (1 + z1 + (1 + 1 + 1)) + 70 * xs + 16 * (xs * xs) + 2 * (xs * (1 + z1 + (1 + 1 + 1))), z' >= 0, xs >= 0, z1 >= 0, z = 1, x >= 0, z'' = 1 + x + xs
domatch[Ite](z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
domatch[Ite](z, z', z'', z1) -{ 41 + 34·xs + 8·xs2 }→ 1 + z1 + s40 :|: s40 >= 0, s40 <= 84 + 6 * (1 + z1 + (1 + 1 + 1)) + 70 * xs + 16 * (xs * xs) + 2 * (xs * (1 + z1 + (1 + 1 + 1))), z = 2, z' >= 0, xs >= 0, z1 >= 0, x >= 0, z'' = 1 + x + xs
eqNatList(z, z') -{ 2 + xs }→ s13 :|: s13 >= 0, s13 <= 2, s >= 0, s <= 2, y1 >= 0, xs >= 0, z = 1 + (1 + x12) + xs, ys >= 0, z' = 1 + (1 + y1) + ys, x12 >= 0
eqNatList(z, z') -{ 1 + z }→ s14 :|: s14 >= 0, s14 <= 2, z - 1 >= 0, z' = 1 + (1 + y2) + ys, ys >= 0, y2 >= 0
eqNatList(z, z') -{ 2 + xs }→ s15 :|: s15 >= 0, s15 <= 2, x13 >= 0, xs >= 0, z' - 1 >= 0, z = 1 + (1 + x13) + xs
eqNatList(z, z') -{ 1 + z }→ s16 :|: s16 >= 0, s16 <= 2, z - 1 >= 0, z' - 1 >= 0
eqNatList(z, z') -{ 2 + xs }→ s17 :|: s17 >= 0, s17 <= 2, z = 1 + x + xs, xs >= 0, ys >= 0, x >= 0, y >= 0, z' = 1 + y + ys
eqNatList(z, z') -{ 1 }→ 2 :|: z = 1, z' = 1
eqNatList(z, z') -{ 1 }→ 1 :|: z = 1 + x + xs, xs >= 0, x >= 0, z' = 1
eqNatList(z, z') -{ 1 }→ 1 :|: z = 1, ys >= 0, y >= 0, z' = 1 + y + ys
eqNatList[Ite](z, z', z'', z1, z2) -{ 1 + z2 }→ s18 :|: s18 >= 0, s18 <= 2, z = 2, z2 >= 0, z'' >= 0, z' >= 0, z1 >= 0
eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }→ 1 :|: z2 >= 0, z = 1, z'' >= 0, z' >= 0, z1 >= 0
eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }→ 0 :|: z >= 0, z2 >= 0, z' >= 0, z'' >= 0, z1 >= 0
notEmpty(z) -{ 1 }→ 2 :|: z = 1 + x + xs, xs >= 0, x >= 0
notEmpty(z) -{ 1 }→ 1 :|: z = 1
prefix(z, z') -{ 2 }→ s10 :|: s10 >= 0, s10 <= 2, s2 >= 0, s2 <= 2, xs2 >= 0, z = 1 + (1 + x'') + (1 + x3 + xs2), z' - 3 >= 0, x'' >= 0, x3 >= 0
prefix(z, z') -{ 2 }→ s11 :|: s11 >= 0, s11 <= 2, s3 >= 0, s3 <= 2, xs >= 0, z' = 1 + (1 + y') + xs, y' >= 0, z - 3 >= 0
prefix(z, z') -{ 1 }→ s12 :|: s12 >= 0, s12 <= 2, s4 >= 0, s4 <= 2, z = 1 + (1 + x'') + xs', xs >= 0, z' = 1 + (1 + y') + xs, xs' >= 0, y' >= 0, x'' >= 0
prefix(z, z') -{ 4 + 2·xs1 }→ s21 :|: s19 >= 0, s19 <= 2, s20 >= 0, s20 <= 2, s21 >= 0, s21 <= 2, s'' >= 0, s'' <= 2, s1 >= 0, s1 <= 2, z = 1 + (1 + x'') + (1 + x''' + xs''), z' = 1 + (1 + y') + (1 + x2 + xs1), xs'' >= 0, y' >= 0, xs1 >= 0, x''' >= 0, x'' >= 0, x2 >= 0
prefix(z, z') -{ 4 + 2·xs3 }→ s24 :|: s22 >= 0, s22 <= 2, s23 >= 0, s23 <= 2, s24 >= 0, s24 <= 2, s5 >= 0, s5 <= 2, z' = 1 + (1 + y'') + (1 + x4 + xs3), x4 >= 0, x'1 >= 0, z = 1 + 0 + (1 + x'1 + xs'''), y'' >= 0, xs''' >= 0, xs3 >= 0
prefix(z, z') -{ 4 + 2·xs5 }→ s27 :|: s25 >= 0, s25 <= 2, s26 >= 0, s26 <= 2, s27 >= 0, s27 <= 2, s6 >= 0, s6 <= 2, x1 >= 0, z' = 1 + 0 + (1 + x6 + xs5), x'2 >= 0, x6 >= 0, z = 1 + (1 + x1) + (1 + x'2 + xs'1), xs5 >= 0, xs'1 >= 0
prefix(z, z') -{ 4 + 2·xs7 }→ s30 :|: s28 >= 0, s28 <= 2, s29 >= 0, s29 <= 2, s30 >= 0, s30 <= 2, s7 >= 0, s7 <= 2, x8 >= 0, x'3 >= 0, z' = 1 + 0 + (1 + x8 + xs7), xs7 >= 0, z = 1 + 0 + (1 + x'3 + xs'2), xs'2 >= 0
prefix(z, z') -{ 4 + 2·xs9 }→ s33 :|: s31 >= 0, s31 <= 2, s32 >= 0, s32 <= 2, s33 >= 0, s33 <= 2, s8 >= 0, s8 <= 2, z = 1 + x' + (1 + x'4 + xs'3), z' = 1 + x + (1 + x10 + xs9), x' >= 0, x >= 0, x'4 >= 0, x10 >= 0, xs9 >= 0, xs'3 >= 0
prefix(z, z') -{ 1 }→ 2 :|: z = 1, z' >= 0
prefix(z, z') -{ 2 }→ 2 :|: z' - 1 >= 0, z = 1 + 0 + 1, 2 = 2
prefix(z, z') -{ 1 }→ 1 :|: z = 1 + x + xs, xs >= 0, x >= 0, z' = 1
prefix(z, z') -{ 2 }→ 1 :|: x5 >= 0, z' - 3 >= 0, xs4 >= 0, z = 1 + 0 + (1 + x5 + xs4), 1 = 1
prefix(z, z') -{ 2 }→ 1 :|: xs >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, z = 1 + 0 + 1, 2 = 2, 1 = 1
prefix(z, z') -{ 2 }→ 1 :|: xs6 >= 0, x1 >= 0, z' = 1 + 0 + 1, z = 1 + (1 + x1) + (1 + x7 + xs6), x7 >= 0, 1 = 1
prefix(z, z') -{ 2 }→ 1 :|: z' - 1 >= 0, z - 3 >= 0, 2 = 2, 1 = 1
prefix(z, z') -{ 2 }→ 1 :|: z = 1 + 0 + (1 + x9 + xs8), z' = 1 + 0 + 1, xs8 >= 0, x9 >= 0, 2 = 2, 1 = 1
prefix(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
prefix(z, z') -{ 2 }→ 0 :|: x5 >= 0, z' - 3 >= 0, xs4 >= 0, z = 1 + 0 + (1 + x5 + xs4), v0 >= 0, v1 >= 0, 1 = v0, 1 = v1
prefix(z, z') -{ 2 }→ 0 :|: xs >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, z = 1 + 0 + 1, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1
prefix(z, z') -{ 1 }→ 0 :|: xs >= 0, z - 1 >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1
prefix(z, z') -{ 2 }→ 0 :|: xs6 >= 0, x1 >= 0, z' = 1 + 0 + 1, z = 1 + (1 + x1) + (1 + x7 + xs6), x7 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 1 = v1
prefix(z, z') -{ 2 }→ 0 :|: z' - 1 >= 0, z - 3 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1
prefix(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, x1 >= 0, z = 1 + (1 + x1) + xs', xs' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1
prefix(z, z') -{ 2 }→ 0 :|: z = 1 + 0 + (1 + x9 + xs8), z' = 1 + 0 + 1, xs8 >= 0, x9 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 1 = v1
prefix(z, z') -{ 2 }→ 0 :|: z' - 1 >= 0, z = 1 + 0 + 1, v0 >= 0, v1 >= 0, 2 = v0, 2 = v1
prefix(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 0 = v1
prefix(z, z') -{ 2 }→ 0 :|: z = 1 + x' + (1 + x11 + xs10), x' >= 0, z' - 2 >= 0, x11 >= 0, xs10 >= 0, v0 >= 0, v1 >= 0, 0 = v0, 1 = v1
prefix(z, z') -{ 2 }→ 0 :|: xs >= 0, z' = 1 + x + xs, z - 2 >= 0, x >= 0, v0 >= 0, v1 >= 0, 0 = v0, 2 = v1
prefix(z, z') -{ 1 }→ 0 :|: xs >= 0, z' = 1 + x + xs, x' >= 0, xs' >= 0, x >= 0, z = 1 + x' + xs', v0 >= 0, v1 >= 0, 0 = v0, 0 = v1
strmatch(z, z') -{ 42 + 34·z' + 8·z'2 }→ s38 :|: s38 >= 0, s38 <= 84 + 6 * 1 + 70 * z' + 16 * (z' * z') + 2 * (z' * 1), z >= 0, z' >= 0

Function symbols to be analyzed: {strmatch}
Previous analysis results are:
notEmpty: runtime: O(1) [1], size: O(1) [2]
!EQ: runtime: O(1) [0], size: O(1) [2]
and: runtime: O(1) [0], size: O(1) [2]
eqNatList[Ite]: runtime: O(n1) [1 + z2], size: O(1) [2]
eqNatList: runtime: O(n1) [1 + z], size: O(1) [2]
prefix: runtime: O(n1) [2 + 2·z'], size: O(1) [2]
domatch[Ite]: runtime: O(n2) [5 + 4·z'' + 2·z''2], size: O(n2) [15 + 11·z'' + z''·z1 + 4·z''2 + 3·z1]
domatch: runtime: O(n2) [41 + 34·z' + 8·z'2], size: O(n2) [84 + 70·z' + 2·z'·z'' + 16·z'2 + 6·z'']

(53) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed SIZE bound using CoFloCo for: strmatch
after applying outer abstraction to obtain an ITS,
resulting in: INF with polynomial bound: ?

(54) Obligation:

Complexity RNTS consisting of the following rules:

!EQ(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 2, z - 1 >= 0, z' - 1 >= 0
!EQ(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
!EQ(z, z') -{ 0 }→ 1 :|: z' - 1 >= 0, z = 0
!EQ(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
!EQ(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
domatch(z, z', z'') -{ 13 + 8·x + 4·x·xs + 2·x2 + 8·xs + 2·xs2 }→ s36 :|: s36 >= 0, s36 <= 3 * z'' + 15 + 4 * ((1 + x + xs) * (1 + x + xs)) + 11 * (1 + x + xs) + 1 * ((1 + x + xs) * z''), xs >= 0, z'' >= 0, z' = 1 + x + xs, z = 1, x >= 0
domatch(z, z', z'') -{ 12 + 8·x + 4·x·xs + 2·x2 + 8·xs + 2·xs2 }→ s37 :|: s37 >= 0, s37 <= 3 * z'' + 15 + 4 * ((1 + x + xs) * (1 + x + xs)) + 11 * (1 + x + xs) + 1 * ((1 + x + xs) * z''), z >= 0, xs >= 0, z'' >= 0, z' = 1 + x + xs, x >= 0
domatch(z, z', z'') -{ 15 + 8·x + 4·x·xs + 2·x2 + 10·xs + 2·xs2 }→ s41 :|: s41 >= 0, s41 <= 3 * z'' + 15 + 4 * ((1 + x + xs) * (1 + x + xs)) + 11 * (1 + x + xs) + 1 * ((1 + x + xs) * z''), s34 >= 0, s34 <= 2, s35 >= 0, s35 <= 2, s9 >= 0, s9 <= 2, xs >= 0, z'' >= 0, z' = 1 + x + xs, x >= 0, z = 1 + x'5 + xs'4, xs'4 >= 0, x'5 >= 0
domatch(z, z', z'') -{ 1 }→ 1 :|: z = 1 + x + xs, xs >= 0, z'' >= 0, x >= 0, z' = 1
domatch(z, z', z'') -{ 1 }→ 1 + z'' + 1 :|: z'' >= 0, z = 1, z' = 1
domatch[Ite](z, z', z'', z1) -{ 41 + 34·xs + 8·xs2 }→ s39 :|: s39 >= 0, s39 <= 84 + 6 * (1 + z1 + (1 + 1 + 1)) + 70 * xs + 16 * (xs * xs) + 2 * (xs * (1 + z1 + (1 + 1 + 1))), z' >= 0, xs >= 0, z1 >= 0, z = 1, x >= 0, z'' = 1 + x + xs
domatch[Ite](z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
domatch[Ite](z, z', z'', z1) -{ 41 + 34·xs + 8·xs2 }→ 1 + z1 + s40 :|: s40 >= 0, s40 <= 84 + 6 * (1 + z1 + (1 + 1 + 1)) + 70 * xs + 16 * (xs * xs) + 2 * (xs * (1 + z1 + (1 + 1 + 1))), z = 2, z' >= 0, xs >= 0, z1 >= 0, x >= 0, z'' = 1 + x + xs
eqNatList(z, z') -{ 2 + xs }→ s13 :|: s13 >= 0, s13 <= 2, s >= 0, s <= 2, y1 >= 0, xs >= 0, z = 1 + (1 + x12) + xs, ys >= 0, z' = 1 + (1 + y1) + ys, x12 >= 0
eqNatList(z, z') -{ 1 + z }→ s14 :|: s14 >= 0, s14 <= 2, z - 1 >= 0, z' = 1 + (1 + y2) + ys, ys >= 0, y2 >= 0
eqNatList(z, z') -{ 2 + xs }→ s15 :|: s15 >= 0, s15 <= 2, x13 >= 0, xs >= 0, z' - 1 >= 0, z = 1 + (1 + x13) + xs
eqNatList(z, z') -{ 1 + z }→ s16 :|: s16 >= 0, s16 <= 2, z - 1 >= 0, z' - 1 >= 0
eqNatList(z, z') -{ 2 + xs }→ s17 :|: s17 >= 0, s17 <= 2, z = 1 + x + xs, xs >= 0, ys >= 0, x >= 0, y >= 0, z' = 1 + y + ys
eqNatList(z, z') -{ 1 }→ 2 :|: z = 1, z' = 1
eqNatList(z, z') -{ 1 }→ 1 :|: z = 1 + x + xs, xs >= 0, x >= 0, z' = 1
eqNatList(z, z') -{ 1 }→ 1 :|: z = 1, ys >= 0, y >= 0, z' = 1 + y + ys
eqNatList[Ite](z, z', z'', z1, z2) -{ 1 + z2 }→ s18 :|: s18 >= 0, s18 <= 2, z = 2, z2 >= 0, z'' >= 0, z' >= 0, z1 >= 0
eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }→ 1 :|: z2 >= 0, z = 1, z'' >= 0, z' >= 0, z1 >= 0
eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }→ 0 :|: z >= 0, z2 >= 0, z' >= 0, z'' >= 0, z1 >= 0
notEmpty(z) -{ 1 }→ 2 :|: z = 1 + x + xs, xs >= 0, x >= 0
notEmpty(z) -{ 1 }→ 1 :|: z = 1
prefix(z, z') -{ 2 }→ s10 :|: s10 >= 0, s10 <= 2, s2 >= 0, s2 <= 2, xs2 >= 0, z = 1 + (1 + x'') + (1 + x3 + xs2), z' - 3 >= 0, x'' >= 0, x3 >= 0
prefix(z, z') -{ 2 }→ s11 :|: s11 >= 0, s11 <= 2, s3 >= 0, s3 <= 2, xs >= 0, z' = 1 + (1 + y') + xs, y' >= 0, z - 3 >= 0
prefix(z, z') -{ 1 }→ s12 :|: s12 >= 0, s12 <= 2, s4 >= 0, s4 <= 2, z = 1 + (1 + x'') + xs', xs >= 0, z' = 1 + (1 + y') + xs, xs' >= 0, y' >= 0, x'' >= 0
prefix(z, z') -{ 4 + 2·xs1 }→ s21 :|: s19 >= 0, s19 <= 2, s20 >= 0, s20 <= 2, s21 >= 0, s21 <= 2, s'' >= 0, s'' <= 2, s1 >= 0, s1 <= 2, z = 1 + (1 + x'') + (1 + x''' + xs''), z' = 1 + (1 + y') + (1 + x2 + xs1), xs'' >= 0, y' >= 0, xs1 >= 0, x''' >= 0, x'' >= 0, x2 >= 0
prefix(z, z') -{ 4 + 2·xs3 }→ s24 :|: s22 >= 0, s22 <= 2, s23 >= 0, s23 <= 2, s24 >= 0, s24 <= 2, s5 >= 0, s5 <= 2, z' = 1 + (1 + y'') + (1 + x4 + xs3), x4 >= 0, x'1 >= 0, z = 1 + 0 + (1 + x'1 + xs'''), y'' >= 0, xs''' >= 0, xs3 >= 0
prefix(z, z') -{ 4 + 2·xs5 }→ s27 :|: s25 >= 0, s25 <= 2, s26 >= 0, s26 <= 2, s27 >= 0, s27 <= 2, s6 >= 0, s6 <= 2, x1 >= 0, z' = 1 + 0 + (1 + x6 + xs5), x'2 >= 0, x6 >= 0, z = 1 + (1 + x1) + (1 + x'2 + xs'1), xs5 >= 0, xs'1 >= 0
prefix(z, z') -{ 4 + 2·xs7 }→ s30 :|: s28 >= 0, s28 <= 2, s29 >= 0, s29 <= 2, s30 >= 0, s30 <= 2, s7 >= 0, s7 <= 2, x8 >= 0, x'3 >= 0, z' = 1 + 0 + (1 + x8 + xs7), xs7 >= 0, z = 1 + 0 + (1 + x'3 + xs'2), xs'2 >= 0
prefix(z, z') -{ 4 + 2·xs9 }→ s33 :|: s31 >= 0, s31 <= 2, s32 >= 0, s32 <= 2, s33 >= 0, s33 <= 2, s8 >= 0, s8 <= 2, z = 1 + x' + (1 + x'4 + xs'3), z' = 1 + x + (1 + x10 + xs9), x' >= 0, x >= 0, x'4 >= 0, x10 >= 0, xs9 >= 0, xs'3 >= 0
prefix(z, z') -{ 1 }→ 2 :|: z = 1, z' >= 0
prefix(z, z') -{ 2 }→ 2 :|: z' - 1 >= 0, z = 1 + 0 + 1, 2 = 2
prefix(z, z') -{ 1 }→ 1 :|: z = 1 + x + xs, xs >= 0, x >= 0, z' = 1
prefix(z, z') -{ 2 }→ 1 :|: x5 >= 0, z' - 3 >= 0, xs4 >= 0, z = 1 + 0 + (1 + x5 + xs4), 1 = 1
prefix(z, z') -{ 2 }→ 1 :|: xs >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, z = 1 + 0 + 1, 2 = 2, 1 = 1
prefix(z, z') -{ 2 }→ 1 :|: xs6 >= 0, x1 >= 0, z' = 1 + 0 + 1, z = 1 + (1 + x1) + (1 + x7 + xs6), x7 >= 0, 1 = 1
prefix(z, z') -{ 2 }→ 1 :|: z' - 1 >= 0, z - 3 >= 0, 2 = 2, 1 = 1
prefix(z, z') -{ 2 }→ 1 :|: z = 1 + 0 + (1 + x9 + xs8), z' = 1 + 0 + 1, xs8 >= 0, x9 >= 0, 2 = 2, 1 = 1
prefix(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
prefix(z, z') -{ 2 }→ 0 :|: x5 >= 0, z' - 3 >= 0, xs4 >= 0, z = 1 + 0 + (1 + x5 + xs4), v0 >= 0, v1 >= 0, 1 = v0, 1 = v1
prefix(z, z') -{ 2 }→ 0 :|: xs >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, z = 1 + 0 + 1, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1
prefix(z, z') -{ 1 }→ 0 :|: xs >= 0, z - 1 >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1
prefix(z, z') -{ 2 }→ 0 :|: xs6 >= 0, x1 >= 0, z' = 1 + 0 + 1, z = 1 + (1 + x1) + (1 + x7 + xs6), x7 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 1 = v1
prefix(z, z') -{ 2 }→ 0 :|: z' - 1 >= 0, z - 3 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1
prefix(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, x1 >= 0, z = 1 + (1 + x1) + xs', xs' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1
prefix(z, z') -{ 2 }→ 0 :|: z = 1 + 0 + (1 + x9 + xs8), z' = 1 + 0 + 1, xs8 >= 0, x9 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 1 = v1
prefix(z, z') -{ 2 }→ 0 :|: z' - 1 >= 0, z = 1 + 0 + 1, v0 >= 0, v1 >= 0, 2 = v0, 2 = v1
prefix(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 0 = v1
prefix(z, z') -{ 2 }→ 0 :|: z = 1 + x' + (1 + x11 + xs10), x' >= 0, z' - 2 >= 0, x11 >= 0, xs10 >= 0, v0 >= 0, v1 >= 0, 0 = v0, 1 = v1
prefix(z, z') -{ 2 }→ 0 :|: xs >= 0, z' = 1 + x + xs, z - 2 >= 0, x >= 0, v0 >= 0, v1 >= 0, 0 = v0, 2 = v1
prefix(z, z') -{ 1 }→ 0 :|: xs >= 0, z' = 1 + x + xs, x' >= 0, xs' >= 0, x >= 0, z = 1 + x' + xs', v0 >= 0, v1 >= 0, 0 = v0, 0 = v1
strmatch(z, z') -{ 42 + 34·z' + 8·z'2 }→ s38 :|: s38 >= 0, s38 <= 84 + 6 * 1 + 70 * z' + 16 * (z' * z') + 2 * (z' * 1), z >= 0, z' >= 0

Function symbols to be analyzed: {strmatch}
Previous analysis results are:
notEmpty: runtime: O(1) [1], size: O(1) [2]
!EQ: runtime: O(1) [0], size: O(1) [2]
and: runtime: O(1) [0], size: O(1) [2]
eqNatList[Ite]: runtime: O(n1) [1 + z2], size: O(1) [2]
eqNatList: runtime: O(n1) [1 + z], size: O(1) [2]
prefix: runtime: O(n1) [2 + 2·z'], size: O(1) [2]
domatch[Ite]: runtime: O(n2) [5 + 4·z'' + 2·z''2], size: O(n2) [15 + 11·z'' + z''·z1 + 4·z''2 + 3·z1]
domatch: runtime: O(n2) [41 + 34·z' + 8·z'2], size: O(n2) [84 + 70·z' + 2·z'·z'' + 16·z'2 + 6·z'']
strmatch: runtime: ?, size: INF

(55) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed RUNTIME bound using KoAT for: strmatch
after applying outer abstraction to obtain an ITS,
resulting in: O(n2) with polynomial bound: 42 + 34·z' + 8·z'2

(56) Obligation:

Complexity RNTS consisting of the following rules:

!EQ(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 2, z - 1 >= 0, z' - 1 >= 0
!EQ(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
!EQ(z, z') -{ 0 }→ 1 :|: z' - 1 >= 0, z = 0
!EQ(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
!EQ(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
domatch(z, z', z'') -{ 13 + 8·x + 4·x·xs + 2·x2 + 8·xs + 2·xs2 }→ s36 :|: s36 >= 0, s36 <= 3 * z'' + 15 + 4 * ((1 + x + xs) * (1 + x + xs)) + 11 * (1 + x + xs) + 1 * ((1 + x + xs) * z''), xs >= 0, z'' >= 0, z' = 1 + x + xs, z = 1, x >= 0
domatch(z, z', z'') -{ 12 + 8·x + 4·x·xs + 2·x2 + 8·xs + 2·xs2 }→ s37 :|: s37 >= 0, s37 <= 3 * z'' + 15 + 4 * ((1 + x + xs) * (1 + x + xs)) + 11 * (1 + x + xs) + 1 * ((1 + x + xs) * z''), z >= 0, xs >= 0, z'' >= 0, z' = 1 + x + xs, x >= 0
domatch(z, z', z'') -{ 15 + 8·x + 4·x·xs + 2·x2 + 10·xs + 2·xs2 }→ s41 :|: s41 >= 0, s41 <= 3 * z'' + 15 + 4 * ((1 + x + xs) * (1 + x + xs)) + 11 * (1 + x + xs) + 1 * ((1 + x + xs) * z''), s34 >= 0, s34 <= 2, s35 >= 0, s35 <= 2, s9 >= 0, s9 <= 2, xs >= 0, z'' >= 0, z' = 1 + x + xs, x >= 0, z = 1 + x'5 + xs'4, xs'4 >= 0, x'5 >= 0
domatch(z, z', z'') -{ 1 }→ 1 :|: z = 1 + x + xs, xs >= 0, z'' >= 0, x >= 0, z' = 1
domatch(z, z', z'') -{ 1 }→ 1 + z'' + 1 :|: z'' >= 0, z = 1, z' = 1
domatch[Ite](z, z', z'', z1) -{ 41 + 34·xs + 8·xs2 }→ s39 :|: s39 >= 0, s39 <= 84 + 6 * (1 + z1 + (1 + 1 + 1)) + 70 * xs + 16 * (xs * xs) + 2 * (xs * (1 + z1 + (1 + 1 + 1))), z' >= 0, xs >= 0, z1 >= 0, z = 1, x >= 0, z'' = 1 + x + xs
domatch[Ite](z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
domatch[Ite](z, z', z'', z1) -{ 41 + 34·xs + 8·xs2 }→ 1 + z1 + s40 :|: s40 >= 0, s40 <= 84 + 6 * (1 + z1 + (1 + 1 + 1)) + 70 * xs + 16 * (xs * xs) + 2 * (xs * (1 + z1 + (1 + 1 + 1))), z = 2, z' >= 0, xs >= 0, z1 >= 0, x >= 0, z'' = 1 + x + xs
eqNatList(z, z') -{ 2 + xs }→ s13 :|: s13 >= 0, s13 <= 2, s >= 0, s <= 2, y1 >= 0, xs >= 0, z = 1 + (1 + x12) + xs, ys >= 0, z' = 1 + (1 + y1) + ys, x12 >= 0
eqNatList(z, z') -{ 1 + z }→ s14 :|: s14 >= 0, s14 <= 2, z - 1 >= 0, z' = 1 + (1 + y2) + ys, ys >= 0, y2 >= 0
eqNatList(z, z') -{ 2 + xs }→ s15 :|: s15 >= 0, s15 <= 2, x13 >= 0, xs >= 0, z' - 1 >= 0, z = 1 + (1 + x13) + xs
eqNatList(z, z') -{ 1 + z }→ s16 :|: s16 >= 0, s16 <= 2, z - 1 >= 0, z' - 1 >= 0
eqNatList(z, z') -{ 2 + xs }→ s17 :|: s17 >= 0, s17 <= 2, z = 1 + x + xs, xs >= 0, ys >= 0, x >= 0, y >= 0, z' = 1 + y + ys
eqNatList(z, z') -{ 1 }→ 2 :|: z = 1, z' = 1
eqNatList(z, z') -{ 1 }→ 1 :|: z = 1 + x + xs, xs >= 0, x >= 0, z' = 1
eqNatList(z, z') -{ 1 }→ 1 :|: z = 1, ys >= 0, y >= 0, z' = 1 + y + ys
eqNatList[Ite](z, z', z'', z1, z2) -{ 1 + z2 }→ s18 :|: s18 >= 0, s18 <= 2, z = 2, z2 >= 0, z'' >= 0, z' >= 0, z1 >= 0
eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }→ 1 :|: z2 >= 0, z = 1, z'' >= 0, z' >= 0, z1 >= 0
eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }→ 0 :|: z >= 0, z2 >= 0, z' >= 0, z'' >= 0, z1 >= 0
notEmpty(z) -{ 1 }→ 2 :|: z = 1 + x + xs, xs >= 0, x >= 0
notEmpty(z) -{ 1 }→ 1 :|: z = 1
prefix(z, z') -{ 2 }→ s10 :|: s10 >= 0, s10 <= 2, s2 >= 0, s2 <= 2, xs2 >= 0, z = 1 + (1 + x'') + (1 + x3 + xs2), z' - 3 >= 0, x'' >= 0, x3 >= 0
prefix(z, z') -{ 2 }→ s11 :|: s11 >= 0, s11 <= 2, s3 >= 0, s3 <= 2, xs >= 0, z' = 1 + (1 + y') + xs, y' >= 0, z - 3 >= 0
prefix(z, z') -{ 1 }→ s12 :|: s12 >= 0, s12 <= 2, s4 >= 0, s4 <= 2, z = 1 + (1 + x'') + xs', xs >= 0, z' = 1 + (1 + y') + xs, xs' >= 0, y' >= 0, x'' >= 0
prefix(z, z') -{ 4 + 2·xs1 }→ s21 :|: s19 >= 0, s19 <= 2, s20 >= 0, s20 <= 2, s21 >= 0, s21 <= 2, s'' >= 0, s'' <= 2, s1 >= 0, s1 <= 2, z = 1 + (1 + x'') + (1 + x''' + xs''), z' = 1 + (1 + y') + (1 + x2 + xs1), xs'' >= 0, y' >= 0, xs1 >= 0, x''' >= 0, x'' >= 0, x2 >= 0
prefix(z, z') -{ 4 + 2·xs3 }→ s24 :|: s22 >= 0, s22 <= 2, s23 >= 0, s23 <= 2, s24 >= 0, s24 <= 2, s5 >= 0, s5 <= 2, z' = 1 + (1 + y'') + (1 + x4 + xs3), x4 >= 0, x'1 >= 0, z = 1 + 0 + (1 + x'1 + xs'''), y'' >= 0, xs''' >= 0, xs3 >= 0
prefix(z, z') -{ 4 + 2·xs5 }→ s27 :|: s25 >= 0, s25 <= 2, s26 >= 0, s26 <= 2, s27 >= 0, s27 <= 2, s6 >= 0, s6 <= 2, x1 >= 0, z' = 1 + 0 + (1 + x6 + xs5), x'2 >= 0, x6 >= 0, z = 1 + (1 + x1) + (1 + x'2 + xs'1), xs5 >= 0, xs'1 >= 0
prefix(z, z') -{ 4 + 2·xs7 }→ s30 :|: s28 >= 0, s28 <= 2, s29 >= 0, s29 <= 2, s30 >= 0, s30 <= 2, s7 >= 0, s7 <= 2, x8 >= 0, x'3 >= 0, z' = 1 + 0 + (1 + x8 + xs7), xs7 >= 0, z = 1 + 0 + (1 + x'3 + xs'2), xs'2 >= 0
prefix(z, z') -{ 4 + 2·xs9 }→ s33 :|: s31 >= 0, s31 <= 2, s32 >= 0, s32 <= 2, s33 >= 0, s33 <= 2, s8 >= 0, s8 <= 2, z = 1 + x' + (1 + x'4 + xs'3), z' = 1 + x + (1 + x10 + xs9), x' >= 0, x >= 0, x'4 >= 0, x10 >= 0, xs9 >= 0, xs'3 >= 0
prefix(z, z') -{ 1 }→ 2 :|: z = 1, z' >= 0
prefix(z, z') -{ 2 }→ 2 :|: z' - 1 >= 0, z = 1 + 0 + 1, 2 = 2
prefix(z, z') -{ 1 }→ 1 :|: z = 1 + x + xs, xs >= 0, x >= 0, z' = 1
prefix(z, z') -{ 2 }→ 1 :|: x5 >= 0, z' - 3 >= 0, xs4 >= 0, z = 1 + 0 + (1 + x5 + xs4), 1 = 1
prefix(z, z') -{ 2 }→ 1 :|: xs >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, z = 1 + 0 + 1, 2 = 2, 1 = 1
prefix(z, z') -{ 2 }→ 1 :|: xs6 >= 0, x1 >= 0, z' = 1 + 0 + 1, z = 1 + (1 + x1) + (1 + x7 + xs6), x7 >= 0, 1 = 1
prefix(z, z') -{ 2 }→ 1 :|: z' - 1 >= 0, z - 3 >= 0, 2 = 2, 1 = 1
prefix(z, z') -{ 2 }→ 1 :|: z = 1 + 0 + (1 + x9 + xs8), z' = 1 + 0 + 1, xs8 >= 0, x9 >= 0, 2 = 2, 1 = 1
prefix(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
prefix(z, z') -{ 2 }→ 0 :|: x5 >= 0, z' - 3 >= 0, xs4 >= 0, z = 1 + 0 + (1 + x5 + xs4), v0 >= 0, v1 >= 0, 1 = v0, 1 = v1
prefix(z, z') -{ 2 }→ 0 :|: xs >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, z = 1 + 0 + 1, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1
prefix(z, z') -{ 1 }→ 0 :|: xs >= 0, z - 1 >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1
prefix(z, z') -{ 2 }→ 0 :|: xs6 >= 0, x1 >= 0, z' = 1 + 0 + 1, z = 1 + (1 + x1) + (1 + x7 + xs6), x7 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 1 = v1
prefix(z, z') -{ 2 }→ 0 :|: z' - 1 >= 0, z - 3 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1
prefix(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, x1 >= 0, z = 1 + (1 + x1) + xs', xs' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1
prefix(z, z') -{ 2 }→ 0 :|: z = 1 + 0 + (1 + x9 + xs8), z' = 1 + 0 + 1, xs8 >= 0, x9 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 1 = v1
prefix(z, z') -{ 2 }→ 0 :|: z' - 1 >= 0, z = 1 + 0 + 1, v0 >= 0, v1 >= 0, 2 = v0, 2 = v1
prefix(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 0 = v1
prefix(z, z') -{ 2 }→ 0 :|: z = 1 + x' + (1 + x11 + xs10), x' >= 0, z' - 2 >= 0, x11 >= 0, xs10 >= 0, v0 >= 0, v1 >= 0, 0 = v0, 1 = v1
prefix(z, z') -{ 2 }→ 0 :|: xs >= 0, z' = 1 + x + xs, z - 2 >= 0, x >= 0, v0 >= 0, v1 >= 0, 0 = v0, 2 = v1
prefix(z, z') -{ 1 }→ 0 :|: xs >= 0, z' = 1 + x + xs, x' >= 0, xs' >= 0, x >= 0, z = 1 + x' + xs', v0 >= 0, v1 >= 0, 0 = v0, 0 = v1
strmatch(z, z') -{ 42 + 34·z' + 8·z'2 }→ s38 :|: s38 >= 0, s38 <= 84 + 6 * 1 + 70 * z' + 16 * (z' * z') + 2 * (z' * 1), z >= 0, z' >= 0

Function symbols to be analyzed:
Previous analysis results are:
notEmpty: runtime: O(1) [1], size: O(1) [2]
!EQ: runtime: O(1) [0], size: O(1) [2]
and: runtime: O(1) [0], size: O(1) [2]
eqNatList[Ite]: runtime: O(n1) [1 + z2], size: O(1) [2]
eqNatList: runtime: O(n1) [1 + z], size: O(1) [2]
prefix: runtime: O(n1) [2 + 2·z'], size: O(1) [2]
domatch[Ite]: runtime: O(n2) [5 + 4·z'' + 2·z''2], size: O(n2) [15 + 11·z'' + z''·z1 + 4·z''2 + 3·z1]
domatch: runtime: O(n2) [41 + 34·z' + 8·z'2], size: O(n2) [84 + 70·z' + 2·z'·z'' + 16·z'2 + 6·z'']
strmatch: runtime: O(n2) [42 + 34·z' + 8·z'2], size: INF

(57) FinalProof (EQUIVALENT transformation)

Computed overall runtime complexity

(58) BOUNDS(1, n^2)